如何将Firebase DataSnapshot对象保存到共享首选项?

时间:2016-09-14 09:42:45

标签: android serialization firebase sharedpreferences snapshot

我正在尝试将Firebase DataSnapshot对象保存到sharedpreferences。为什么,你问?

请参阅this post,其中我制定了涉及此操作的狡猾(?)计划。

...

到目前为止我尝试过:

1)使用Gson.Json method。结果:似乎不起作用......我不认为DataSnapshot类是一个“POJO”类型类...至少不会有一个适用于gson的类。

2)使用此方法:

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()); 
}

结果:不起作用......我不认为DataSnapshot类是'Serializable'。

我想到了另一种方法 - 只需将DataSnapshot.toString()保存到Sharedpreferences中......但是如何再次将其恢复?你做不到:

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

有谁知道这样做的方法?

三江源!

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我想在SharedPreferences中保存Datasnapshot,我的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();
    }
   }

//将数据作为JSON对象获取。

 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();
        }
    }