Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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
Java 在共享首选项中保存自定义数组_Java_Android_Arrays_Sharedpreferences - Fatal编程技术网

Java 在共享首选项中保存自定义数组

Java 在共享首选项中保存自定义数组,java,android,arrays,sharedpreferences,Java,Android,Arrays,Sharedpreferences,我将要编写一个小应用程序,其中几乎所有的数据都存储在一个自定义数组中,该数组包含多个列表视图。我不想以不同的形式保存数据。我想将此数组保存在共享首选项中。我开始寻找其他回答的问题,并尝试了不同的方法,但没有一种对我有效 在主要活动中,我有两个小方法: public class MainActivity extends AppCompatActivity { public static ArrayList<Item> items = new ArrayList<Item>

我将要编写一个小应用程序,其中几乎所有的数据都存储在一个自定义数组中,该数组包含多个列表视图。我不想以不同的形式保存数据。我想将此数组保存在共享首选项中。我开始寻找其他回答的问题,并尝试了不同的方法,但没有一种对我有效

在主要活动中,我有两个小方法:

public class MainActivity extends AppCompatActivity {

public static ArrayList<Item> items = new ArrayList<Item>();
SharedPreferences mPrefs = getBaseContext().getSharedPreferences("KEY12", Context.MODE_PRIVATE);
Gson gson = new Gson();

[...]

protected void savePrefs() {

    SharedPreferences.Editor editor = mPrefs.edit();
    String json = gson.toJson(items);
    System.out.println(json);
    editor.putString("items_prefs", json);
    editor.commit();

}

protected void loadPrefs() {

    String empty_list = gson.toJson(new ArrayList<Item>());

    items = gson.fromJson(mPrefs.getString("KEY12", empty_list),
            new TypeToken<ArrayList<Item>>() {}.getType());


}
}
public类MainActivity扩展了AppCompatActivity{
public static ArrayList items=new ArrayList();
SharedReferences mPrefs=getBaseContext().GetSharedReferences(“KEY12”,Context.MODE\u PRIVATE);
Gson Gson=新的Gson();
[...]
受保护的void savePrefs(){
SharedReferences.Editor=mPrefs.edit();
字符串json=gson.toJson(items);
System.out.println(json);
putString(“items\u prefs”,json);
commit();
}
受保护的void loadPrefs(){
字符串empty_list=gson.toJson(new ArrayList());
items=gson.fromJson(mPrefs.getString(“KEY12”,空列表),
新的TypeToken(){}.getType());
}
}
我正在调用
loadPrefs()方法和
savePrefs()在onResume中,因此每次我回到主活动时,都应该更新首选项

我得到的错误是:

致命异常:主 进程:com.example.android.calc123,PID:30579 java.lang.RuntimeException:无法实例化活动组件信息{com.example.android.calc123/com.example.android.calc123.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.SharedReferences android.Context.GetSharedReferences(java.lang.String,int)” 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 位于android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)上 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:154) 位于android.app.ActivityThread.main(ActivityThread.java:6077) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferences(java.lang.String,int)” 位于com.example.android.calc123.MainActivity。(MainActivity.java:61) 位于java.lang.Class.newInstance(本机方法) 位于android.app.Instrumentation.newActivity(Instrumentation.java:1078) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538) 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 位于android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)上 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:154) 位于android.app.ActivityThread.main(ActivityThread.java:6077) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)


如何解决此问题,或者以不同的方式询问在处理共享首选项时我做错了什么?

正如错误日志所说,您在空指针中调用GetSharedReferences(getBaseContext)


放入OnCreate
mPrefs=getBaseContext().getSharedReferences(“KEY12”,Context.MODE\u PRIVATE)

感谢您的回答,不幸的是,我仍然收到空指针的错误…请尝试使用
getApplicationContext()
。可能是到期了