我正在尝试将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])
有谁知道这样做的方法?
三江源!
答案 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();
}
}