1
我已經構建了一個讀取傳入短信的應用程序。但是,每當有新短信來臨時它都會得到例外。 logcat給出以下消息:無法啓動接收器com.commlink.smscheck.SmsBroadcastReceiver:java.lang.NullPointerException
10-04 12:18:47.392: E/AndroidRuntime(8225): java.lang.RuntimeException: Unable to start receiver com.commlink.smscheck.SmsBroadcastReceiver: java.lang.NullPointerException
10-04 12:18:47.392: E/AndroidRuntime(8225): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2616)
10-04 12:18:47.392: E/AndroidRuntime(8225): at android.app.ActivityThread.access$1700(ActivityThread.java:151)
10-04 12:18:47.392: E/AndroidRuntime(8225): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1418)
10-04 12:18:47.392: E/AndroidRuntime(8225): at android.os.Handler.dispatchMessage(Handler.java:110)
10-04 12:18:47.392: E/AndroidRuntime(8225): at android.os.Looper.loop(Looper.java:193)
10-04 12:18:47.392: E/AndroidRuntime(8225): at android.app.ActivityThread.main(ActivityThread.java:5330)
10-04 12:18:47.392: E/AndroidRuntime(8225): at java.lang.reflect.Method.invokeNative(Native Method)
10-04 12:18:47.392: E/AndroidRuntime(8225): at java.lang.reflect.Method.invoke(Method.java:515)
10-04 12:18:47.392: E/AndroidRuntime(8225): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
10-04 12:18:47.392: E/AndroidRuntime(8225): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
10-04 12:18:47.392: E/AndroidRuntime(8225): at dalvik.system.NativeStart.main(Native Method)
10-04 12:18:47.392: E/AndroidRuntime(8225): Caused by: java.lang.NullPointerException
10-04 12:18:47.392: E/AndroidRuntime(8225): at com.commlink.smscheck.SmsBroadcastReceiver.onReceive(SmsBroadcastReceiver.java:44)
10-04 12:18:47.392: E/AndroidRuntime(8225): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2609)
10-04 12:18:47.392: E/AndroidRuntime(8225): ... 10 more
WHere是錯誤嗎?我該如何解決這個問題?
SmsBroadcastReceiver的代碼如下:
public class SmsBroadcastReceiver extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";
public String pre_address = "03590000004";
String smsBody;
String address;
public void onReceive(Context context, Intent intent) {
Bundle intentExtras = intent.getExtras();
if (intentExtras != null) {
Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
String smsMessageStr = "";
for (int i = 0; i < sms.length; ++i) {
SmsMessage smsMessage = SmsMessage
.createFromPdu((byte[]) sms[i]);
smsBody = smsMessage.getMessageBody().toString();
address = smsMessage.getOriginatingAddress();
if (pre_address.equals(address)) {
smsMessageStr += "SMS From: " + address + "\n";
smsMessageStr += smsBody + "\n";
}
}
Toast.makeText(context, smsMessageStr, Toast.LENGTH_SHORT).show();
// this will update the UI with message
SmsActivity inst = SmsActivity.instance();
inst.updateList(smsBody);
if (pre_address.equals(address))
inst.Notify(inst.getMessageCountUnread()
+ " unread message", address);
}
}
}
實例方法如下:
private static SmsActivity inst;
public static SmsActivity instance() {
return inst;
}
請發佈您的SmsBroadcastReceiver代碼! –
問題已更新。 –
請將您的instance()方法發佈到您的SmsActivity中。問題在那裏,我想。 –