微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类中的空共享首选项

如何解决类中的空共享首选项

对于一些常见的活动流程,我创建了一个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 举报,一经查实,本站将立刻删除。