Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 恢复应用程序后的NullPointerException_Android_Nullpointerexception_Onresume - Fatal编程技术网

Android 恢复应用程序后的NullPointerException

Android 恢复应用程序后的NullPointerException,android,nullpointerexception,onresume,Android,Nullpointerexception,Onresume,好吧,这个恼人的问题可能很熟悉,但我不知道它叫什么,怎么解决。当我打开我的应用程序并进入菜单时,同时,在恢复应用程序时,我丢失了所有数据。android似乎喜欢清理数据,以尽可能保持操作系统的快速和稳定。在恢复应用程序之前,在清除任何类型的变量/null时,建议使用哪种方法将数据保存在内存中并将其检索回来?我尝试使用setSharedPreferences将ArrayList解析为一个对象,并将该对象解析为一个字符串以保存数据并检索它,但我发现无法将对象解析为字符串异常。必须有更好的选择 任何帮

好吧,这个恼人的问题可能很熟悉,但我不知道它叫什么,怎么解决。当我打开我的应用程序并进入菜单时,同时,在恢复应用程序时,我丢失了所有数据。android似乎喜欢清理数据,以尽可能保持操作系统的快速和稳定。在恢复应用程序之前,在清除任何类型的变量/null时,建议使用哪种方法将数据保存在内存中并将其检索回来?我尝试使用setSharedPreferences将ArrayList解析为一个对象,并将该对象解析为一个字符串以保存数据并检索它,但我发现无法将对象解析为字符串异常。必须有更好的选择

任何帮助都将不胜感激

编辑:

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

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

有许多方法可以在应用程序中持久化数据;我不打算在这里详细介绍,但您应该查看以下资源:


如果您有一个数组列表,听起来可能值得使用SQLite

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

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

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

SQLite:大量相同的结构化数据应存储在SQLite数据库中,因为数据库是为此类数据设计的。由于数据是由数据库组织和管理的,所以可以使用查询语言(如SQL)对其进行查询,以获得符合特定条件的数据子集。在这里搜索变得很容易。虽然SQLite的扩展可能没有专用数据库那么大,但对于较小的应用程序(如Android应用程序)来说,它非常快速和方便。例如:存储listview项目或存储配方应用程序的配方


希望这有帮助

看到相关代码和LogCat错误真的很难…好吧,让我添加一些代码,给我一些时间。你需要保存什么类型的数据?如果它像Strings/int这样简单,我就从一个文本文件读/写。信息中既包含字符串也包含整数。在这种情况下,我建议将JSONObject存储为字符串,以便稍后检索和解析(假设字符串的大小相对合理)。非常好的信息!但遗憾的是,这并不能解决我的问题。请再次阅读我的问题,因为我用一些代码示例更新了它。先生,你说得对。在这里,使用数据库可能是最好的解决方案,因为这个项目的JSON大小可以更改。但我也认为,使用数据库存储所有信息是避免此错误的常见方法。
@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();
}