LoginSignup
5
3

More than 3 years have passed since last update.

AndroidアプリでsqliteデータをFirebaseのstorageに保存する方法

Last updated at Posted at 2020-01-05

はじめに

データテニスというテニスのスコアを記録するAndroidアプリを公開しています。
app.png
利用者から下記のような要望をいただいており、対応方法を検討していました。
「機種変更しても記録したデータを引き継げるようにしてほしい」
「スマホで記録したデータをタブレットでも確認できるようにしたい」

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ファイルとして保存できます。

最後に

データテニスアプリはこちらで公開してるので、興味ある方はぜひぜひダウンロードしてご利用ください。
Get it on Google Play

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3