当前位置: 首页 > 知识库问答 >
问题:

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

鄢承运
2023-03-14

我正在尝试将Firebase DataSnapshot对象保存到SharedReferences。

请看这篇文章,我在其中设计了一种方法来实现这一点。

...

到目前为止,我已经尝试了:

>

  • 使用Gson。Json方法。结果:似乎不起作用。。。我不认为DataSnapshot类是“POJO”类型的类。。。至少没有一个能与gson合作。

    使用此方法:

    私有静态字符串toString(可序列化o)引发IOException{ByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream oos=new ObjectOutputStream(baos);oos.writeObject(o);oos.close();return Base64.getEncoder()。encodeToString(baos.toByteArray());}

    结果:不工作。。。我认为DataSnapshot类不是“可序列化的”。

    我想到了另一种方法——保存DataSnapshot。toString()到SharedReferences。。。但是你怎么才能把它拿回来呢?您不能执行以下操作:

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

    欢迎任何帮助。

  • 共有1个答案

    公冶高义
    2023-03-14

    我也面临着同样的问题。我想将Datasnapshot保存在Shared首选项中,而我的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();
            }
        }
    
     类似资料:
    • 我在共享首选项中保存列表并将其显示在列表视图中没有问题,但我的问题是当我重新启动应用程序并尝试将项目添加到列表视图时 旧的存储项目已删除.有我的代码: } public void getDates(){

    • 我正在创建一个番茄工作计时器应用程序。它有2项活动: 主要活动是设置时间 我已经创建了一个对象,它保存了设置的时间,我希望这些时间显示在Recents活动中的按钮中。但是,似乎没有保存数据,而是显示了包名称。

    • 你好,我正在尝试保存一个共享首选项的主题。当用户点击某个主题的按钮时,我希望该主题被设置为默认并保存,所以当他们重新打开应用程序时,它仍然是那个新主题。

    • 以下是我的主要活动 这是我的作品 下面是我的activity_main.xml 和主要活动 现在调试器输出 很明显,即使我稍微调整一下,它也不能正常工作。接下来是:使用共享首选项保存android主题

    • 我正在向SharedPreference添加一个集合。这是来自另一个类的静态集,该类处理一些数据并将其存储在该集中。 然后我转到另一个活动(订单活动),在那里我显示了这组信息。第一次访问共享偏好时,我能够获得正确的详细信息。例如name1、name2、name3。 然后,我离开此活动,返回到另一个活动,添加另一个名称,然后再次返回到此 Order 活动。我希望这次得到名称1,名称2,名称3,名称4

    • 我做了一个应用程序,她的主要目的是保存某种信息(现在哪个信息不重要),在我的应用程序中,我做了一个名为sp的< code>SharedPreferences对象和一个< code>SharedPreferences。编辑器调用编辑器的对象。 在我的方法中,我检索存储的HashSet,如下所示: 如果它是null,我得到一个新的HashSet(第一次使用),以及我需要存储的所有信息Im作为不同的字符