Java Android在实例化SharedReferences时引发NullPointerException
我是Android开发的新手,我正在尝试在我(目前为止)的活动中创建一个简单的Java Android在实例化SharedReferences时引发NullPointerException,java,android,android-studio,nullpointerexception,sharedpreferences,Java,Android,Android Studio,Nullpointerexception,Sharedpreferences,我是Android开发的新手,我正在尝试在我(目前为止)的活动中创建一个简单的SharedReferences。然而,每次尝试运行它时,我都会在运行时收到一个空指针异常,即使我在声明行上分配了变量。我的完整跟踪: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{andyszoke.macrohub/andyszoke.macrohub.SetMacroManualActivity}: java.la
SharedReferences
。然而,每次尝试运行它时,我都会在运行时收到一个空指针异常,即使我在声明行上分配了变量。我的完整跟踪:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{andyszoke.macrohub/andyszoke.macrohub.SetMacroManualActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2988)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3242)
at android.app.ActivityThread.access$1000(ActivityThread.java:205)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1695)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6895)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:111)
at andyszoke.macrohub.SetMacroManualActivity.<init>(SetMacroManualActivity.java:17)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1690)
at android.app.Instrumentation.newActivity(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2978)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3242)
at android.app.ActivityThread.access$1000(ActivityThread.java:205)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1695)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6895)
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:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
异常在类的第三行抛出。我尝试了各种不同的声明组合,并查看了尽可能多的stackoverflow帖子,但没有任何东西可以解决这个问题。任何帮助都将不胜感激 设置共享首选项的代码在onCreate之前运行。对于所有正常用途,在onCreate之前只应分配变量。当您提到this.getSharedReferences时,单词“this”指的是活动,但onCreate尚未调用(因此活动尚未形成)。所以“this”被分配给一个空对象。这样就得到了NullPointerException
public class SetMacroManualActivity extends AppCompatActivity {
private static final String TAG = "myMessage";
private static final String MY_PREF = "MyPreferences";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// load the layout
setContentView(R.layout.filters);
SharedPreferences prefs = getSharedPreferences(MY_PREF, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
模式_PRIVATE是通常使用的,根据需求还有其他模式。因此,请检查适合您的方法。将
prefs
和编辑器
初始化移动到onCreate()
。这会导致程序中其他地方的加载和保存方法出错,而不是onCreate。简单地将SharedReferences和Editor对象作为参数传递是否可以接受?我还没有在任何教程或视频中看到这样做explanations@AndrewSzoke只需将初始化移动到onCreate()
。把声明留在原来的地方。@MikeM。我想是这样的。或者至少我现在得到了不相关的异常,所以它正在编译程序。谢谢
public class SetMacroManualActivity extends AppCompatActivity {
private static final String TAG = "myMessage";
private static final String MY_PREF = "MyPreferences";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// load the layout
setContentView(R.layout.filters);
SharedPreferences prefs = getSharedPreferences(MY_PREF, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();