空对象引用SharedPreferences

时间:2018-12-04 21:07:05

标签: java android

我收到此错误:

  

进程:com.mycompany.myngdroidapp,PID:16170       java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String,int)'

我写了这段代码

ContextClass:

package com.ngdroidapp;

import android.content.Context;

import istanbul.gamelab.ngdroid.base.BaseActivity;
import istanbul.gamelab.ngdroid.base.BaseCanvas;

public class ContextClass
{
    public static Context context;
    public static BaseActivity activity;

    public static void setContext(Context Ncontext) {
        context = Ncontext;
    }

    public static  Context getContext() {
        return context;
    }

    public static void setActivity(BaseActivity activity) { ContextClass.activity = activity; }

    public static BaseActivity getActivity() { return activity; }
}

MenuCanvas:

public Context getApplicationContext() {
        return context;
    }

    SharedPreferences mSharedPrefs = getApplicationContext().getSharedPreferences("veriTabani", MODE_PRIVATE);
            SharedPreferences.Editor mPrefsEditor = mSharedPrefs.edit();
            int seviye = mSharedPrefs.getInt("seviye", 0);
            mPrefsEditor.putInt("seviye", ++seviye);
            mPrefsEditor.commit();

3 个答案:

答案 0 :(得分:0)

context尚未初始化。是空的如果在getApplicationContext()Activity中,则可以使用Service获取上下文;如果在getContext()中,则可以使用Fragment获取上下文。或将其作为参数传递给方法或构造函数,无论这些方法在何处定义。

答案 1 :(得分:0)

在 Android 上,您可以将 Activity 转换为 Context。因此,您可以在需要上下文的地方使用应用的 Android Activity。在 NgdroidApp 上,活动是根(NgApp 类)的公共成员。如果您需要从 MenuCanvas 访问活动,您可以编写:

SharedPreferences mSharedPrefs = root.activity.getSharedPreferences("veriTabani", MODE_PRIVATE);

答案 2 :(得分:0)

这是因为你还没有初始化上下文。

在使用 like 之前初始化它:

context = getApplicationContext();

context = YourActivityName.this;

context = this;