SharedPreferences的错误,空指针异常

时间:2016-04-28 02:36:48

标签: java android nullpointerexception sharedpreferences

所以无论我多少次尝试在这里和那里调整我的代码,我都会遇到同样的错误。我将发布与错误有关的每一小段代码。

我不会包含不必要的代码,所以如果我的代码看起来不完整,我会将其删除,以便人们更容易诊断问题!

头等舱

我写了!!!错误!!!在根据我的日志被认为是错误原因的代码之后。

SharedPreferences sf;
SharedPreferences.Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
sf = getSharedPreferences("MyData", MODE_PRIVATE);
checkCookie();
}

//function for making sure there's data 
public void checkCookie() {
        editor = sf.edit();
        if (sf.getInt("cookies", -1) == -1) {
            editor.putInt("cookies", 0);
        }
    }
//function for retrieving amount of cookies
public int getCookies()
    {
        editor = sf.edit(); !!! Error here !!!
        int x = sf.getInt("cookies", 0);
        return x;
    }
//function for changing amount of cookies
public void changeCookies(int x)
    {
        editor = sf.edit();
        editor.putInt("cookies", x);
    }

第二课

我把!!!错误!!!在给出的第二个错误,它基本上是调用带有错误的函数。

//MyActivity is the first class
MyActivity mCookie = new MyActivity();

//function for adding cookies
public void cookieCalc(){
        if (Math.abs((5-(millis/1000))) <= 0.005)
            mCookie.changeCookies(100 * CB); ... much more similar code

//an if statement within a function which just calls the function getcookies and cookiecalc
if (loop == 2){
cookieCalc();
myText.setText("= " + mCookie.getCookies()); !!! this calls the function which gives error !!!
}

错误是100%,因为它与普通变量一起使用SharedPreferences,但是我需要保存变量,并且被告知这是一个非常简单的方法。如果所有这些仍然不够,我无法向您解释,那么我将把我的整个代码粘贴到gitHub或其他观看平台上。

错误记录

04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at app.z0nen.slidemenu.MyActivity.changeCookies(MyActivity.java:74)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at app.z0nen.slidemenu.menu1_Fragment.cookieCalc(menu1_Fragment.java:75)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at app.z0nen.slidemenu.menu1_Fragment$1.onClick(menu1_Fragment.java:148)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at android.view.View.performClick(View.java:5242)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at android.widget.TextView.performClick(TextView.java:10571)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21196)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:145)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:6938)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
04-27 21:11:46.258 26975-26975/app.z0nen.menu E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

3 个答案:

答案 0 :(得分:1)

你永远不应该自己创建活动实例!只有系统应该这样做。

如果您自己创建实例,onCreate永远不会被调用,因为此实例不会通过标准活动生命周期。

答案 1 :(得分:0)

不要自己做新的实例。 onCreate是br

答案 2 :(得分:-1)

解决

SharedPreferences sf = this.getActivity()。getSharedPreferences(&#34; your_prefs&#34;,Activity.MODE_PRIVATE);

因为它在片段类中我必须添加this.getActivity(),我最后还添加了Activity.MODE_PRIVATE。我可能得到空指针异常,因为它无法访问我的Activity类,因为片段扩展了其他东西?只是猜测我的,到目前为止它仍然没有工作我想要它,但我防止了崩溃。 编辑它没有工作,因为我没有做editor.commit();保存更改。