Android 类中的空共享首选项

Android 类中的空共享首选项,android,class,preferences,shared,Android,Class,Preferences,Shared,对于一些常见的活动流程,我创建了一个类CurrentDate,该类获取实际日期,用于返回欧洲(dd/mm/yy)和美国的不同本地首选项中的日期(mm/dd/yy…我创建了一些首选项数据。int,Strings…问题是在我的类中加载首选项数据,没有任何onCreate…因为不是活动,因此它没有加载共享首选项的实例。并给出一个空错误: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'androi

对于一些常见的活动流程,我创建了一个类CurrentDate,该类获取实际日期,用于返回欧洲(dd/mm/yy)和美国的不同本地首选项中的日期(mm/dd/yy…我创建了一些首选项数据。int,Strings…问题是在我的类中加载首选项数据,没有任何onCreate…因为不是活动,因此它没有加载共享首选项的实例。并给出一个空错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
    at com.example.ricmac.task2.CurrentDate.<init>(CurrentDate.java:50)
<此处为第50行的故障:

final SharedPreferences settings = mContext.getSharedPreferences(PREFS_FILE, PREFS_MODE);
<继续使用CurrentDate类的代码

public void checkDate(TextView tstart){
    String iCurrent = mContext.getResources().getString(R.string.actual); // "current"
    String START = tstart.getText().toString(); // get string start date
    int localDatePreferencePosition = settings.getInt(KEY_LOCAL_DATE, 0); // get from shared preferences the preferences 0  European, 1 American,....
    if(START.equalsIgnoreCase(iCurrent)){ // check if it the current default date
        
        tstart.setText(getSetLocalDate(getCurrent(), localDatePreferencePosition,mContext)); // set the date in local format in textView tstar
    }

}
`

逻辑错误:

`

2020-10-18 12:18:52.383 25809-25809/com.example.ricmac.task2 E/AndroidRuntime:致命异常:main
进程:com.example.ricmac.task2,PID:25809
java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.ricmac.task2/com.example.ricmac.task2.introTaskFullScreen}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferences(java.lang.String,int)”
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)上
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6494)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferences(java.lang.String,int)”
位于com.example.ricmac.task2.CurrentDate.(CurrentDate.java:50)
在com.example.ricmac.task2.introTaskFullScreen.onCreate(introTaskFullScreen.java:184)上
位于android.app.Activity.performCreate(Activity.java:7009)
位于android.app.Activity.performCreate(Activity.java:7000)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)上
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6494)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

`您的问题是mContext为空


当上下文为null时,您可以在checkDate方法本身中获得共享首选项,而不是在第50行创建设置对象,使用TextView获取上下文(我认为tStart.getContext()应该可以工作)

您的mContext引用的是null,它给出了NullPointerException
public void checkDate(TextView tstart){
    String iCurrent = mContext.getResources().getString(R.string.actual); // "current"
    String START = tstart.getText().toString(); // get string start date
    int localDatePreferencePosition = settings.getInt(KEY_LOCAL_DATE, 0); // get from shared preferences the preferences 0  European, 1 American,....
    if(START.equalsIgnoreCase(iCurrent)){ // check if it the current default date
        
        tstart.setText(getSetLocalDate(getCurrent(), localDatePreferencePosition,mContext)); // set the date in local format in textView tstar
    }

}
2020-10-18 12:18:52.383 25809-25809/com.example.ricmac.task2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ricmac.task2, PID: 25809
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ricmac.task2/com.example.ricmac.task2.introTaskFullScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
    at com.example.ricmac.task2.CurrentDate.<init>(CurrentDate.java:50)
    at com.example.ricmac.task2.introTaskFullScreen.onCreate(introTaskFullScreen.java:184)
    at android.app.Activity.performCreate(Activity.java:7009)
    at android.app.Activity.performCreate(Activity.java:7000)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)