0

SMSを送信すると、取得しNullPointerExceptionます。で問題になるかもしれないと思いますcontext。私はこれをで使用していTabActivityGroupます。

これは私のコードです:

   if(sendSMS.equals("1")) {
    double invoiceVal = getInvoiceValue();
    String phone = getPhoneNo(); 
    String[] arrPhone = phone.split(";");
    System.out.println("==arrPhone==" +arrPhone.length);
    StringBuffer sms = new StringBuffer();
    sms.append("Miscellaneous Sale");
    sms.append("\n");
    sms.append("\n");
    sms.append("Territory: " + territoryCode +"\n");
    sms.append("Sales Rep: " + strExecutive +"\n");
    sms.append("Route Code: " + routeCode +"\n");
    sms.append("Retailer Code: " + retailCode +" " +retailerName +"\n");
    sms.append("Invoice No: " + printInPrefix+"\\"+printInvoiceNo +"\n");
    sms.append("Invoice Value: " + df.format(invoiceVal) +"\n");
    sendSMS(arrPhone, sms.toString());
}



 String sendSMS(String[] arrPhone, String message){        
     String SENT = "SMS_SENT";
     smsStatus ="YES";
     String DELIVERED = "SMS_DELIVERED";
     String phoneNumber = "";
     try {
         for (int i = 0; i < arrPhone.length; i++) {
             phoneNumber = arrPhone[i];
             System.out.println("==phoneNumber==" +phoneNumber);
             PendingIntent sentPI = PendingIntent.getBroadcast(getBaseContext(), 0, new Intent(SENT), 0);
             PendingIntent deliveredPI = PendingIntent.getBroadcast(getBaseContext(), 0,new Intent(DELIVERED), 0);
             registerReceiver(new BroadcastReceiver(){
                @Override
                 public void onReceive(Context arg0, Intent arg1) {
                     switch (getResultCode()){
                        case Activity.RESULT_OK:
                            Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                            Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show();
                            smsStatus ="NO";
                            break;
                        case SmsManager.RESULT_ERROR_NO_SERVICE:
                            Toast.makeText(getBaseContext(), "No service",  Toast.LENGTH_SHORT).show();
                            smsStatus ="NO";
                            break;
                        case SmsManager.RESULT_ERROR_NULL_PDU:
                            Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show();
                            smsStatus ="NO";
                            break;
                        case SmsManager.RESULT_ERROR_RADIO_OFF:
                            Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show();
                            smsStatus ="NO"; 
                            break;
                      }
                }
             }, new IntentFilter(SENT));

              //---when the SMS has been delivered---
              registerReceiver(new BroadcastReceiver(){
                  @Override
                   public void onReceive(Context arg0, Intent arg1) {
                        switch (getResultCode()){
                            case Activity.RESULT_OK:
                                Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show();
                                break;
                            case Activity.RESULT_CANCELED:
                                Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show();
                                smsStatus ="NO";
                                break;                        
                        }
                    }
                }, new IntentFilter(DELIVERED));        

                SmsManager sms = SmsManager.getDefault();
                sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);       
        }
    } catch (Exception e) {
        e.printStackTrace();
        smsStatus ="NO";
    }
     return smsStatus;

}   

エラー:

     06-21 15:46:31.335: W/System.err(7510): java.lang.NullPointerException
06-21 15:46:31.345: W/System.err(7510):     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:349)
06-21 15:46:31.345: W/System.err(7510):     at xont.ventura.controller.sales.LineDiscountActivity.sendSMS(LineDiscountActivity.java:1498)
06-21 15:46:31.345: W/System.err(7510):     at xont.ventura.controller.sales.LineDiscountActivity.saveInvoice(LineDiscountActivity.java:1354)
06-21 15:46:31.345: W/System.err(7510):     at xont.ventura.controller.sales.BatchActivity$2$1.onClick(BatchActivity.java:164)
06-21 15:46:31.345: W/System.err(7510):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:193)
06-21 15:46:31.345: W/System.err(7510):     at android.os.Handler.dispatchMessage(Handler.java:130)
06-21 15:46:31.355: W/System.err(7510):     at android.os.Looper.loop(Looper.java:154)
06-21 15:46:31.355: W/System.err(7510):     at android.app.ActivityThread.main(ActivityThread.java:4668)
06-21 15:46:31.355: W/System.err(7510):     at java.lang.reflect.Method.invokeNative(Native Method)
06-21 15:46:31.355: W/System.err(7510):     at java.lang.reflect.Method.invoke(Method.java:552)
06-21 15:46:31.355: W/System.err(7510):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:917)
06-21 15:46:31.355: W/System.err(7510):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
06-21 15:46:31.355: W/System.err(7510):     at dalvik.system.NativeStart.main(Native Method)

SalesActivityGroup.group.getApplicationContext()、、を使用してみSalesActivityGroup.group.getParent()ましたが、同じエラーが発生するまで。

NullPointerException行はありません1498:registerReceiver(new BroadcastReceiver(){

コードの問題点を教えてください。

4

4 に答える 4

3

getBaseContext()と置き換えますarg0

ここにエラーがあります。

onReceiveでコンテキストを提供します。その後、onReceive使用しないでくださいgetBaseContext()

public void onReceive(Context arg0, Intent arg1) {   <--- Use this context i.e arg0
                     switch (getResultCode()){
                        case Activity.RESULT_OK:
                            Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show();
                            break;
于 2012-06-20T10:33:08.633 に答える
1

あなたはActivityGroupを使用しているので、この回答を使用してくださいアクティビティグループで子アクティビティを取得する方法? クラス内で atをLineDiscountActivity呼び出す代わり にインスタンスを取得するnew LineDiscountActivity()onClickBatchActivity

Activity から派生したクラスのインスタンスを作成するために「new」を使用しないでください。そのようなインスタンスは適切に開始されないためです。

于 2012-06-20T11:24:42.497 に答える
1

should use arg0 (which is Context ) instead of getBaseContext()トーストの onReceive(Context arg0, Intent arg1) の中にいると思います......

getBaseContext も変更します

PendingIntent.getBroadcast(getBaseContext(), 0  

<your_actvity_name>.this

于 2012-06-20T10:33:20.973 に答える
0

受信機を起動してみてくださいonStart()

private SMSReceiver smsReceiver;
@Override
public void onStart()
{
    super.onStart();

       smsReceiver = new SMSReceiver();
       IntentFilter intentFilter = new IntentFilter();
       intentFilter.addAction(SENT);
       registerReceiver(smsReceiver, intentFilter);

       //Start our own service
       Intent intent = new Intent(Activity.this, 
       SMSReceiver.class);
       startService(intent);   
 }

別授業で受けます

private class SMSReceiver extends BroadcastReceiver
    {

            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS sent", 
                                Toast.LENGTH_SHORT).show(); 
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        Toast.makeText(getBaseContext(), "Invalid PhoneNumber", 
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        Toast.makeText(getBaseContext(), "No service", 
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        Toast.makeText(getBaseContext(), "Null PDU", 
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(getBaseContext(), "Radio off", 
                                Toast.LENGTH_SHORT).show();
                        break; 
                } 
            }  
    }

onStop() で受信者を登録解除することを忘れないでください

  @Override
      protected void onStop() {
         super.onStop();
         unregisterReceiver(smsReceiver);  
     }

それは私にとって完璧に機能しています。

于 2012-06-20T11:03:57.810 に答える