如何在android中从一个片段切换到另一个片段时存储片段数据?

时间:2015-08-05 18:28:21

标签: android json android-fragments android-studio

我有2个片段。在一个片段中我正在访问服务器JSON数据。 在切换片段时,一次又一次地访问数据。 如何临时存储此数据,直到应用程序处于打开状态,以便不会再次从服务器访问数据。

2 个答案:

答案 0 :(得分:3)

有很多选项可以通过持久性(数据在内存中保留多长时间)权衡效率(保存/加载数据的速度有多快)。

以下所有解决方案都会保留配置更改(例如,方向更改),这通常是良好用户体验所需的最低持久性级别。

|      Method        |  Efficiency  |            Persistence                 |
+--------------------+--------------+----------------------------------------+
| SharedPreferences  |     Bad      | until app uninstall                    |
| SavedInstanceState |     Bad      | until app finished                     |
| Bundle/Extra       |     Bad      | until app finished                     |
| Database           |     Ok       | until app uninstall                    |
| Application        |     Good     | until app restart                      |
| Singleton          |     Good     | until app restart                      |
| EventBus (Sticky)  |     Good     | until app restart                      |
| Retain Fragment    |     Good     | until Activity finished or app restart |

<强>详情:

  • 应用已完成 =用户已关闭应用
  • 应用重启 =系统关闭应用(内存不足)
  • 糟糕效率=需要做大量工作:
    • 保存: json =&gt; str =&gt;磁盘
    • 加载: disk =&gt; str =&gt; JSON
  • 确定效率=减少工作量(无字符串解析):
    • 保存: json =&gt;数据库
    • 加载:数据库=&gt; JSON
  • 良好效率=对象引用保留在内存中,因此无需任何工作。

但请注意,所有“好”效率方法都具有短暂持久性,因为它们都受到应用程序重启的限制,这种情况发生在内存不足的情况下。由于低内存情况可能随时发生,我通常会将这些方法与 savedInstanceState 结合使用,这可以在内存不足的情况下在退出之前保存数据。

另请注意,存储数据的时间超过了您的需求也不是很好,因此请选择与您的用例匹配的持久性。

答案 1 :(得分:0)

您可以将json字符串存储在共享偏好中以用于临时目的,这样您就不必一次又一次地从服务器访问数据。

 SharedPreferences shared;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            shared = getSharedPreferences("prefs", Context.MODE_PRIVATE);
            shared.edit().putString("JSON",jsonString).commit();
}