2013-10-31 76 views
0

我有一個BroadcastReceiver接收短信,然後應該立即發送回覆短信,如果文本有某些字符。現在它收到併發送短信,但它很快強制關閉給出類似如下:無法啓動接收器... NullPointerException ... LogCat中的ActivityThread.handleReciever(釋義)...可能是什麼問題?這裏是我的代碼,你要尋找的ELSE IF語句(這是我目前測試的部分):無法啓動接收器NullPointerException

public class Service extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 

    if (intent.getAction() 
      .equals("android.provider.Telephony.SMS_RECEIVED")) { 
     Bundle bundle = intent.getExtras(); 
     SmsMessage[] msgs = null; 
     String msgFrom; 
     if (bundle != null) { 
      try { 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       msgs = new SmsMessage[pdus.length]; 
       for (int i = 0; i < msgs.length; i++) { 
        String verificationCode = "717345221"; 
        msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
        msgFrom = msgs[i].getOriginatingAddress(); 
        String encodeHash = Uri.encode("#"); 
        msgFrom = "0" + msgFrom.substring(4) + encodeHash; 
        String msgBody = msgs[i].getMessageBody(); 

        if (msgBody.startsWith(verificationCode)) { 
         this.abortBroadcast(); 
         msgBody = msgBody.substring(verificationCode 
           .length()); 
         try { 
          String dial = msgBody + "*" + msgFrom; 
          Intent call = new Intent(Intent.ACTION_CALL, 
            Uri.parse("tel:" + dial)); 
          call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          context.startActivity(call); 

         } catch (Exception e) { 
          e.toString(); 
         } 
        } else if (msgBody.contains("TEST123")) { 
         Toast.makeText(context, 
           "TEST123 text recieved", 
           Toast.LENGTH_LONG).show(); 
         String transactionCode = null; 
         if (msgBody.length() > 9) { 
          transactionCode = msgBody.substring(0, 9); 
         } 

         String attachCode = "776f76wfuh"; 
         String number = msgs[i].getOriginatingAddress(); 
         String message = attachCode + transactionCode; 

         try { 
          SmsManager sms = SmsManager.getDefault(); 
          PendingIntent pi = PendingIntent.getBroadcast(
            context, 0, new Intent(context, 
              Service.class), 0); 
          sms.sendTextMessage(number, null, message, pi, 
            null); 
          Toast.makeText(context, 
            "Text sent with attach code", 
            Toast.LENGTH_LONG).show(); 

         } catch (Exception e) { 
          // TODO: handle exception 
          Log.d("Exception caught", e.getMessage()); 
         } 
        } 
       } 
      } catch (Exception e) { 
       Log.d("Exception caught", e.getMessage()); 
      } 
     } 
    } 
} 
} 

這裏的logcat的:

10-31 20:42:05.269: E/AndroidRuntime(15080): FATAL EXCEPTION: main 
10-31 20:42:05.269: E/AndroidRuntime(15080): java.lang.RuntimeException: Unable to start receiver com.adbionicpaymentsystem.Service: java.lang.NullPointerException 
10-31 20:42:05.269: E/AndroidRuntime(15080): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at android.app.ActivityThread.access$2400(ActivityThread.java:117) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at android.os.Looper.loop(Looper.java:130) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at android.app.ActivityThread.main(ActivityThread.java:3683) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at java.lang.reflect.Method.invokeNative(Native Method) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at java.lang.reflect.Method.invoke(Method.java:507) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at dalvik.system.NativeStart.main(Native Method) 
10-31 20:42:05.269: E/AndroidRuntime(15080): Caused by: java.lang.NullPointerException 
10-31 20:42:05.269: E/AndroidRuntime(15080): at com.adbionicpaymentsystem.Service.onReceive(Service.java:21) 
10-31 20:42:05.269: E/AndroidRuntime(15080): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1794) 
10-31 20:42:05.269: E/AndroidRuntime(15080): ... 10 more 
+2

Logcat是否提供調用堆棧? –

+0

這只是第一個可以被視爲無關緊要的陳述。刪除 –

+0

@AdamArold - 這是不好的建議。在這種情況下,我們還不知道與問題相關的是什麼 - 它可能會導致海報在其他任何地方被移除的代碼中。由於空指針異常,大部分任務是讀取logcat並確定相關的代碼行。 –

回答

0

問題是我在測試設備上運行了另一項服務,似乎干擾了此服務

0

一定要有許可的您的清單

<uses-permission android:name="android.permission.SEND_SMS"/> 

,並注意sendTextMessage

This method was deprecated in API level 4. 
Use android.telephony.SmsManager. 
+0

海報表明它最初起作用,所以這不是問題。 –

相關問題