1

好的,这个烦人的问题可能很熟悉,但我不知道它叫什么以及如何解决它。当我打开我的应用程序并转到菜单时,一段时间后,当我恢复应用程序时,我丢失了所有数据。看来 android 喜欢清理数据以保持操作系统尽可能快和稳定。在恢复应用程序之前,当清除任何类型的变量/为空时,建议使用哪种方法将数据保存在内部存储器中并将其取回?我尝试 setSharedPreferences 将 ArrayList 解析为 Object 并将 Object 解析为 String 以保存数据并检索它,但我得到 cannot parse Object to String 异常。必须有更好的选择。

任何帮助将不胜感激。

编辑:

这就是我检索和存储数据的方式:

JSONObject data = (JSONObject) new JSONTokener(result).nextValue();

Helper.RAW_PEOPLE_INFO = data.getJSONArray("people");
Helper.PEOPLE_CONTAINER = new ArrayList<PeopleInfoStorage>();
for( int i = 0; i < Helper.RAW_PEOPLE_INFO.length(); i++ ){
    Helper.PEOPLE_CONTAINER.add( new PeopleInfoStorage(Helper.RAW_PEOPLE_INFO.getJSONObject(i)) );
}

我使用 PEOPLE_CONTAINER ArrayList 稍后在需要时使用它。在我恢复我的应用程序之前,PEOPLE_CONTAINER ArrayList 可能会被清理,所以有人可以帮我举例说明如何将此 ArrayList 存储在内部存储器中,以便我可以从内部存储器中检索数据并将其放回 PEOPLE_CONTAINER ArrayList 以供何时使用它再次为空。

它需要是这样的:

@Override
protected void onPause() {  
    if( Helper.PEOPLE_CONTAINER != null ){
        //save the Helper.PEOPLE_CONTAINER ArrayList to the internal memory
    }
    super.onPause();
}

@Override
protected void onResume() {
    if( Helper.PEOPLE_CONTAINER == null ){
        //retrieve the data and store it back to Helper.PEOPLE_CONTAINER ArrayList
    }
    super.onResume();
}
4

2 回答 2

2

以下是在什么时间使用哪个存储选项的简要说明:

Shared Preferences:这些基本上适用于存储应用程序首选项和其他少量数据。SharedPreferences 是一个键/值存储,您可以在其中将数据保存在某个键下。要从存储中读取数据,您必须知道数据的键。因此,读取数据变得容易。但是对于大型数据集,这可能会变得有点困难,因为您必须为数据集中的每个键定义一个唯一键。例如:在 SharedPreferences 中存储用户登录的会话密钥。

内部存储:这有利于存储用户不需要访问的应用程序数据。可能适用于存储日志或应用程序将创建/更新/删除的任何内容。

SQLite: Large amounts of same structured data should be stored in a SQLite database as databases are designed for this kind of data. As the data is structured and managed by the database, it can be queried to get a sub set of the data which matches certain criteria using a query language like SQL. Searching becomes easy here. While SQLite might not scale nearly as big as the dedicated databases, it is very quick and convenient for smaller applications, like Android apps. Ex: Storing your listview items OR storing recipes for a recipe app.

Hope this helps!!!

于 2013-01-07T20:15:10.227 回答
1

有很多方法可以在应用程序中保存数据;我不会在这里详细介绍,但您应该查看以下资源:

http://developer.android.com/guide/topics/data/data-storage.html

如果你有一个数组列表,听起来它可能值得 SQLite。

于 2013-01-07T20:10:16.477 回答