はじめに
データテニスというテニスのスコアを記録するAndroidアプリを公開しています。
利用者から下記のような要望をいただいており、対応方法を検討していました。
「機種変更しても記録したデータを引き継げるようにしてほしい」
「スマホで記録したデータをタブレットでも確認できるようにしたい」
FirebaseのCloud Storageはアプリのデータをクラウドに保存することができる、というのを知り、本アプリに実装してみました。
FirebaseのStorageは5GBまで無料で利用することができます。
https://firebase.google.com/pricing?hl=ja
sqliteデータをjsonオブジェクトに変換
Androidアプリのデータは通常、sqliteデータベースとして保存します。
そして、Firebase Storageの保存形式はjsonファイルとなっています。
なので、sqliteデータをjsonファイルに変換しFirebaseのstorageに保存するようにします。
まずはsqliteデータのjsonファイルへの変換について。
"TEST_TABLE"という名前のテーブルで格納されたsqlデータベース逐次jsonオブジェクトに格納していきます。下記コード例ですと、Key1のキーの下にkey1-1、key1-2という名前のキーでデータを格納しています。
db = mDataBaseHelper.getReadableDatabase();
Cursor cursor = null;
try {
cursor = db.query("TEST_TABLE", null, null, null, null, null, null);
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
if (cursor.getCount() > 0) {
boolean isEof = cursor.moveToFirst();
while (isEof) {
jsonOneData = new JSONObject();
jsonOneData.put("KEY1-1", cursor.getInt(0));
jsonOneData.put("KEY1-2", cursor.getString(1));
jsonArray.put(jsonOneData);
isEof = cursor.moveToNext();
}
jsonObject.put("Key1", jsonArray);
省略
jsonファイルをFirebase Storageに保存
jsonオブジェクトをjsonファイルとしてFirebase Storageに保存します。
上のコードで省略したtry文の中に下記コードを追記します。
ファイル名や、Firebaseのurlの箇所を書き換えてください。
File file = File.createTempFile("buckup", "json");//保存するjsonファイルの名前
FileWriter filewriter;
filewriter = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(filewriter);
PrintWriter pw = new PrintWriter(bw);
pw.write(jsonObject.toString());
pw.close();
storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("firebaseのurl");
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user!=null) {
String uid = user.getUid();
storageRef.child("users").child(uid).child(fileName).putFile(Uri.fromFile(file));
これで、sqliteデータをjsonファイルとして保存できます。