Использование Sharedpreferences в широковещательном приемнике из-за ошибки

Код BroadcastReceiver представляет собой отдельный модуль SMSReceiver.java. Получатель, объявленный в манифесте с фильтром намерения получения SMS. Так что "всегда включено". Когда приложение запущено или просто в списке последних 8 приложений работает нормально при получении входящих смс. Но потом, когда приложение удаляется из памяти, и остается только получатель, входящие смс из-за ошибки. Дело в том, что я использую в коде ресивера Sharedpreferences. Когда я получаю некоторую информацию из полученного SMS, я должен сохранить ее в настройках для загрузки по основному действию позже.

LogCat показывает мне строку с ошибкой.

public class SmsReceiver extends BroadcastReceiver 
{

    public static SharedPreferences mStatePrefs;

@Override
public void onReceive(Context context, Intent intent) 
{
   //... some code
   SharedPreferences.Editor ed = mStatePrefs.edit(); //HERE I GET AN EXCEPTION
   //... some code
}
}

Журнал LogCat..

12-02 22:36:03.887: ERROR/AndroidRuntime(18345): FATAL EXCEPTION: main
12-02 22:36:03.887: ERROR/AndroidRuntime(18345): java.lang.RuntimeException: Unable to start receiver com.example.android.MyApplication.SmsReceiver: java.lang.NullPointerException
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2034)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at android.app.ActivityThread.access$2400(ActivityThread.java:132)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1098)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at android.os.Looper.loop(Looper.java:143)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at android.app.ActivityThread.main(ActivityThread.java:4268)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at java.lang.reflect.Method.invokeNative(Native Method)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at java.lang.reflect.Method.invoke(Method.java:507)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at dalvik.system.NativeStart.main(Native Method)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345): Caused by: java.lang.NullPointerException
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at com.example.android.MyApplication.SmsReceiver.onReceive(SmsReceiver.java:198)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2019)
12-02 22:36:03.887: ERROR/AndroidRuntime(18345):     ... 10 more

Так что он отлично работает, когда приложение активно или в памяти. Но когда приемник остался один, произошла ошибка. Итак, что мне нужно сделать, чтобы решить эту проблему? Это блокбаг моего приложения, этот ресивер - главное решение, смысл программы. Он должен работать всегда и сохранять информацию в настройках.


person Dimon    schedule 02.12.2011    source источник


Ответы (1)


Вы никогда не получите экземпляр SharedPreference для mStatePrefs. Глядя только на код, который вы показываете, mStatePrefs все равно будет нулевым.

Пытаться:

mStatePrefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor ed = mStatePrefs.edit();
person Will Tate    schedule 02.12.2011
comment
Да .. Я скучаю по PreferenceManager, чем больше я использовал его в коде, но для другой переменной SharedPreference. Сейчас проверил - действительно исправляет ошибку. Большое спасибо за вашу помощь! - person Dimon; 03.12.2011