如何解决类中的空共享首选项
对于一些常见的活动流程,我创建了一个CurrentDate类,该类获取实际日期,以欧洲(dd / mm / yy),美国(mm / dd / yy)的不同本地首选项返回日期。创建一些首选项数据。int,字符串...问题是我的类中的加载首选项数据,没有任何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)
从活动中调用此类CurrentDate:
public class CurrentDate {
private static final int PREFS_MODE = 0;
private static final String PREFS_FILE = "pref";
public CurrentDate (Context context){ mContext = context;}
final SharedPreferences settings = mContext.getSharedPreferences(PREFS_FILE,PREFS_MODE);
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)
`
解决方法
您的问题是mContext为空。
不是在context为null时在第50行上创建设置对象,而是可以使用TextView获取上下文(在我认为tStart.getContext()应该起作用的情况下),在checkDate方法本身中获得共享的首选项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。