2016-09-14 99 views
1

我正在尝试将Firebase DataSnapshot对象保存到sharedpreferences。你为什么问?如何将Firebase DataSnapshot对象保存到共享首选项?

请参阅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类是 '序列化'。

我想到了另一种方法 - 只需将DataSnapshot.toString()保存到Sharedpreferences中即可,但是如何将其重新取出?你不能这样做:

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

有没有人知道一种方法来做到这一点?

谢谢!

+0

你不应该救你怎么知道它有多大,你见过我的数据库** **数据在sharedpreferences –

+0

的大块?有多大太大? –

+0

这是在共享首选项中存储数据快照的不好方法,这在技术上不可见 –

回答

1

我面临同样的问题。我想将Datasnapshot保存在SharedPreferences中,并且我的json数据有点复杂。所以我写了下面的代码。

//要保存到sharedpreference

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