恢复应用程序后出现NullPointerException

时间:2013-01-07 20:07:06

标签: android nullpointerexception onresume

好的,这个恼人的问题可能很熟悉,但我不知道它被称为什么以及如何解决它。当我打开我的应用程序并转到菜单时,在恢复应用程序后,我放弃了所有数据。似乎android喜欢清理数据以尽可能快速和稳定地保持操作系统。在恢复应用程序之前,建议在保存内部存储器中的数据并在清除任何类型的变量时将其检索回来/哪种方法?我尝试使用setSharedPreferences将ArrayList解析为Object并将Object解析为String以保存数据并检索它,但我得到的是无法解析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();
}

2 个答案:

答案 0 :(得分:2)

以下是对何时使用的存储选项的简要说明:

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

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

SQLite :大量相同的结构化数据应存储在SQLite数据库中,因为数据库是针对此类数据而设计的。由于数据是由数据库构建和管理的,因此可以查询使用SQL等查询语言获取与某些条件匹配的数据子集。在这里搜索变得容易。虽然SQLite可能无法像专用数据库那样大规模扩展,但对于像Android应用程序这样的小型应用程序来说,它非常快捷方便。例如:存储列表视图项目或存储配方应用程序的配方。

希望这有帮助!!!

答案 1 :(得分:1)

有许多方法可以在应用程序中保留数据;我不打算在这里详细介绍,但你应该查看这些资源:

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

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