2011-12-02 59 views
0

BroadcastReceiver的代碼是一個單獨的單元SMSReceiver.java。 Receiver在Manifest中使用SMS接收意圖過濾器進行聲明。所以它「永遠在線」。當應用程序正在運行或者只是在最後8個應用程序的列表中時,它可以在收到傳入的SMS時正常工作。但後來,當應用程序從內存中刪除,並且只有收件人待命,由於錯誤而收到SMS。我在接收者的代碼Sharedpreferences中使用的事實。當我從收到的短信中獲得一些信息時,我應該將它保存在主要Activity的加載首選項中。由於錯誤使用broadcastreceiver中的Sharedpreferences

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 

當應用程序被激活或在內存中,以便它工作正常。但是當接收器被放置時,發生錯誤。那麼我需要做什麼來解決這個問題?這是我的應用程序的一個塊錯誤,這個接收器是主要的解決方案,一種程序感。它必須始終工作並將信息保存在偏好中。

回答

1

對於mStatePrefs,您永遠不會得到SharedPreference實例。只看你顯示的代碼,mStatePrefs仍然是空的。

嘗試:

mStatePrefs = PreferenceManager.getDefaultSharedPreferences(context); 
SharedPreferences.Editor ed = mStatePrefs.edit(); 
+0

是..我想念PreferenceManager我在代碼,但另一個SharedPreference變量用它的更多。我現在檢查 - 它確實修復了這個錯誤。非常感謝你的幫助! – Dimon