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)
放入OnCreatemPrefs=getBaseContext().getSharedReferences(“KEY12”,Context.MODE\u PRIVATE)代码>感谢您的回答,不幸的是,我仍然收到空指针的错误…请尝试使用getApplicationContext()
。可能是到期了