【问题标题】:Save a list with SharedPreferences on AndroidStudio在 Android Studio 中使用 SharedPreferences 保存列表
【发布时间】:2017-12-06 21:37:17
【问题描述】:

我正在编写一个应用程序并努力使用 SharedPreferences 保存一个列表。当我运行我的应用程序时,它宣布我的应用程序停止工作。请帮忙 !!这些是我的代码和我的 logcat:

SharedPreferences SPre1 = getSharedPreferences(Context.MODE_PRIVATE);
Set<String> WorkListSet = SPre1.getStringSet("NOTES_SET", new HashSet<String>());
List<String> WorkList = new ArrayList<String>(WorkListSet);

public void Update1()
{
    SharedPreferences.Editor Editor = SPre1.edit();
    Set<String> WorkListSet = new HashSet<String>(WorkList);
    Editor.putStringSet("NOTES_SET", WorkListSet);
    Editor.apply();
}

private SharedPreferences getSharedPreferences(int modePrivate) {
    return null;
}

堆栈跟踪

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Set android.content.SharedPreferences.getStringSet(java.lang.String, java.util.Set)' on a null object reference
at com.newthingtank.along.hello.MainActivity.<init>(MainActivity.java:38)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1606)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  07

【问题讨论】:

    标签: java android listview sharedpreferences


    【解决方案1】:

    SharedPreferences中保存数组

    public static boolean saveArray() {
    
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
    
        SharedPreferences.Editor mEdit1 = sp.edit();
    
    
        mEdit1.putInt("Status_size", sKey.size());  
    
        for(int i=0;i<sKey.size();i++)  
        {
            mEdit1.remove("Status_" + i);
            mEdit1.putString("Status_" + i, sKey.get(i));  
        }
    
        return mEdit1.commit();     
    }
    

    SharedPreferences加载数组数据

    public static void loadArray(Context mContext) {  
    
    
    
    
     SharedPreferences mSharedPreference1 =   PreferenceManager.getDefaultSharedPreferences(mContext);
    
        sKey.clear();
    
        int size = mSharedPreference1.getInt("Status_size", 0);  
    
        for(int i=0;i<size;i++) 
        {
         sKey.add(mSharedPreference1.getString("Status_" + i, null));
        }
    
    }
    

    【讨论】:

    • 如何调用 loadArray ??
    【解决方案2】:
    private SharedPreferences getSharedPreferences(int modePrivate) {
        return null;
    }
    

    您正在调用该方法,而您只是返回 null。所以你实际上从来没有得到共享首选项。

    您需要一个上下文引用并在其上调用getSharedPreferences()。您没有提供足够的信息来说明如何获取对上下文的引用,但任何 Activity 实例都足以作为上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 2012-04-15
      • 2021-11-15
      • 1970-01-01
      • 2017-11-09
      • 2020-11-28
      • 1970-01-01
      • 2014-03-01
      相关资源
      最近更新 更多