1

Firepaces DataSnapshotオブジェクトをsharedpreferencesに保存しようとしています。なぜ聞くの?FirebaseのDataSnapshotオブジェクトを共有設定に保存するにはどうすればいいですか?

this postを参照してください。これには、私がこれを行う狡猾な(?)計画を考案しました。

...私がこれまで試してみました何

Gson.Json methodを使用して

1)。結果:うまくいかないようです...私はDataSnapshotクラスが "POJO"型クラスではないと思います...少なくともgsonで動作するクラスはありません。

private static String toString(Serializable o) throws IOException { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(baos); 
    oos.writeObject(o); 
    oos.close(); 
    return Base64.getEncoder().encodeToString(baos.toByteArray()); 
} 

結果::このメソッドを使用して

2)は動作しません...私はDataSnapshotクラスは、 '直列化可能' であるとは思いません。

私は別の方法を考えました - DataSnapshot.toString()をSharedpreferencesに保存するだけですが、どうやってそれをもう一度取り戻すのですか?あなたはできません:

DataSnapshot snapshot = new DataSnapshot().fromString([string from sharedprefs]) 

これを行う方法を知っている人はいますか?

ありがとうございました!

+0

あなたは、あなたはそれがどのように大きな知っているあなたは私のデータベースを見てきたどのようにsharedpreferences –

+0

で**データ**の大きな塊を保存することになっていませんか?どのくらいの大きさが大きすぎますか? –

+0

これはdatasnapshotを共有プリファレンスに格納する悪い方法です。これは技術的にはフィスブルではありません –

答えて

1

私は同じ問題に直面していました。私はDatasnapshotをSharedPreferencesの中に保存したいのですが、私のjsonデータはちょっと複雑でした。だから私は以下のコードを書いた。

// JSONオブジェクトとしてデータを取得するには

public void setAppLanguageDataSnapshot(DataSnapshot mDataSnapshot) { 
    ObjectMapper mapper = new ObjectMapper(); 
    try { 
     mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); 
     String json = mapper.writeValueAsString(mDataSnapshot.getValue()); 
     StorageUtils.getInstance(context).setString(AppConstants.SharedPrefConstants.APP_CONTENT, json); 
    } catch (JsonProcessingException e) { 
     e.printStackTrace(); 
    } 
    } 

//をsharedpreferenceし保存します。

String data = StorageUtils.getInstance(context).getString(AppConstants.SharedPrefConstants.APP_CONTENT); 
    String value = ""; 
    if (!TextUtils.isEmpty(data)) { 
     try { 
      JSONObject jsonObject = new JSONObject(data); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
関連する問題