Java Android Studio |通过SharedReferences保存对象Arraylist时出现问题
基本上,我正在尝试将arraylist保存到共享首选项,然后我可以关闭应用程序并在最近打开arraylist中的旧数据,但是我在创建方法时遇到了一些问题 代码如下: Arraylist:Java Android Studio |通过SharedReferences保存对象Arraylist时出现问题,java,Java,基本上,我正在尝试将arraylist保存到共享首选项,然后我可以关闭应用程序并在最近打开arraylist中的旧数据,但是我在创建方法时遇到了一些问题 代码如下: Arraylist: public Articles articles = new Articles(); 要保存的方法: public void saveFile(){ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Cont
public Articles articles = new Articles();
要保存的方法:
public void saveFile(){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Container.this);
SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(getContainer());
editor.putString("Saves", json);
editor.apply();
}
以下是日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.bitinbyte.ivycambridgebrassery, PID: 29267
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bitinbyte.ivycambridgebrassery/com.bitinbyte.ivycambridgebrassery.newCount}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ContextWrapper.getPackageName(ContextWrapper.java:142)
at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:537)
at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:526)
at com.bitinbyte.ivycambridgebrassery.Container.saveFile(Container.java:170)
at com.bitinbyte.ivycambridgebrassery.newCount.onCreate(newCount.java:43)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
谢谢大家 您正在将
容器传递给getDefaultSharedReferences
。这是怎么一回事?你不能传递一个上下文对象吗?两者的区别是什么?我对此感到失望…但基本上是Container。在这个类中,我使用MyApplication.getAppContext()
(其中MyApplication是扩展Application
)的方法saveFile和arraylistry。如果有效的话,不要继续使用它。替换为更接近调用saveFile
的活动的上下文对象。