2011-11-16 87 views
1

你好,我收到NullPointerException异常,当我发送消息,我不明白为什么这起了很大的作用。我下面贴我的代码: -当我在android中使用sendMultipartTextMessage发送消息时,NullPointer异常?

广播接收器: -

package z.z.z; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.util.Log; 

public class SMSReceiver extends BroadcastReceiver 
{ 
    private SmsMessage[] msgs; 
    private String strNo,strMsgText; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     try 
     { 
      Bundle bundle = intent.getExtras();   
      msgs = null; 
      String str = "";   

      if (bundle != null) 
      { 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       msgs = new SmsMessage[pdus.length]; 
       for (int i=0; i<msgs.length; i++) 
       { 
        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
        str += "SMS from " + msgs[i].getOriginatingAddress();      
        str += ":"; 
        str += msgs[i].getMessageBody().toString(); 
        str += "\n"; 
        strNo = msgs[i].getOriginatingAddress();  
        strMsgText = msgs[i].getDisplayMessageBody(); 

       } 

       context.startService(new Intent(context,IncomingSMSService.class)); 

      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

} 

IncomingSMSService: -

package z.z.z; 

import java.util.ArrayList; 

import z.z.z.Global; 
import z.z.z.SMSService; 

import android.app.Service; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.IBinder; 
import android.util.Log; 

public class IncomingSMSService extends Service 
{ 

    private String TAG = "IncomingSMSService"; 

    @Override 
    public IBinder onBind(Intent intent) 
    { 
     return null; 
    } 

    @Override 
    public void onCreate() 
    { 
     /* start service */ 

     Log.d(TAG ,"****** in service onCreate **----- "); 
     super.onCreate(); 

     try 
     { 
      Log.d(TAG ,"****** in service try **----- "); 
      /* Read SMS from INBOX */ 
      Uri uriSMSURI = Uri.parse("content://sms/inbox");  
      Cursor cur = getContentResolver().query(uriSMSURI, null, "read = 0", null,null);  
      String sms = "";  
      while (cur.moveToNext()) 
      {   
        sms += "From :" + cur.getString(2) + " : " + cur.getString(11)+"\n"; 
    //    Log.d(TAG, "in SMS Service sms in loop :: "+ sms); 
      } 
      Log.d(TAG, "in SMS Service sms :: "+ sms); 


      Log.d(TAG ,"********** reverseNum ****** "+ Global.destNo); 
      ArrayList<String> ayyMsg = new ArrayList<String>(); 
      ayyMsg.add(sms); 
      SMSService.sendSMS(getBaseContext(), ayyMsg, Global.destNo); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    }} 

SendSMS

package z.z.z; 

     import java.util.ArrayList; 

     import z.z.z.common.RMAReceiver; 

     import android.app.PendingIntent; 
     import android.content.Context; 
     import android.content.Intent; 
     import android.content.IntentFilter; 
     import android.telephony.SmsManager; 
     import android.util.Log; 

     public class SMSService 
     { 

      static String TAG = "SMSService"; 
      static String SENT = "SMS_SENT"; 
      static String DELIVERED = "SMS_DELIVERED"; 

     // static Context mContext; 
      static RMAReceiver rmaReceiver = null; 
      public static void sendSMS(Context context,ArrayList<String> message, String destNumber) 
      { 
       try 
       { 



        PendingIntent sentPI = PendingIntent.getBroadcast(context, 0,new Intent(SENT), 0); 

        PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0,new Intent(DELIVERED), PendingIntent.FLAG_CANCEL_CURRENT); 

        ArrayList<PendingIntent> ayySentPI = new ArrayList<PendingIntent>(); 
        ayySentPI.add(sentPI); 

        ArrayList<PendingIntent> ayyDeliveredPI = new ArrayList<PendingIntent>(); 
        ayyDeliveredPI.add(deliveredPI); 

        receiver(context); 

        SmsManager sms = SmsManager.getDefault(); 

        sms.sendMultipartTextMessage(destNumber, null, message, ayySentPI, ayyDeliveredPI); 

       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 

**receiver**:- 

public static void receiver(Context context) 
    { 
     rmaReceiver = RMAReceiver.getSingleInstance(); 
     context.registerReceiver(rmaReceiver, new IntentFilter(SENT)); 

     //---when the SMS has been delivered--- 
     context.registerReceiver(rmaReceiver, new IntentFilter(DELIVERED)); 
    } 

RMAReceiver

package z.z.z; 

import z.z.z.SMSService; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.SmsManager; 
import android.widget.Toast; 

public class RMAReceiver extends BroadcastReceiver 
{ 
    private static RMAReceiver singleInstance = null; 
    String msg; 

    private RMAReceiver() 
    {  
    } 

    public static RMAReceiver getSingleInstance() 
    { 
     if(singleInstance == null) singleInstance = new RMAReceiver(); 
     return singleInstance; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     System.out.println("Result Code: "+getResultCode()); 
//  resultCode = getResultCode(); 
     switch (getResultCode()) 
     { 
      case Activity.RESULT_OK: 
       msg = "SMS sent/delivered"; 
//    Toast.makeText(context, "SMS sent/delivered", 
//      Toast.LENGTH_SHORT).show(); 
//    SMSService.sendSMS(context, "SMS sent/delivered", Global.confirmNo); 
       break; 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       msg = "Generic failure"; 
//    Toast.makeText(context, "Generic failure", 
//      Toast.LENGTH_SHORT).show(); 
//    SMSService.sendSMS(context, "Generic failure", Global.confirmNo); 
       break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       msg = "No service"; 
//    Toast.makeText(context, "No service", 
//      Toast.LENGTH_SHORT).show(); 
//    SMSService.sendSMS(context, "No service", Global.confirmNo); 
       break; 
      case SmsManager.RESULT_ERROR_NULL_PDU: 
       msg = "Null PDU"; 
//    Toast.makeText(context, "Null PDU", 
//      Toast.LENGTH_SHORT).show(); 
//    SMSService.sendSMS(context, "No service", Global.confirmNo); 
       break; 
      case SmsManager.RESULT_ERROR_RADIO_OFF: 
       msg = "Radio off"; 
//    Toast.makeText(context, "Radio off", 
//      Toast.LENGTH_SHORT).show(); 
//    SMSService.sendSMS(context, "No service", Global.confirmNo); 
       break; 
      case Activity.RESULT_CANCELED: 
       msg = "SMS not delivered"; 
//    Toast.makeText(context, "SMS not delivered", 
//      Toast.LENGTH_SHORT).show(); 
//    SMSService.sendSMS(context, "No service", Global.confirmNo); 
       break; 
     } 

     Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); 
     SMSService.sendSMS(context, msg, Global.confirmNo); 



    } 


} 

MY logcat的错误: -

11-16 18:26:34.661: WARN/System.err(4990): java.lang.NullPointerException 
11-16 18:26:34.673: WARN/System.err(4990):  at android.os.Parcel.readException(Parcel.java:1266) 
11-16 18:26:34.673: WARN/System.err(4990):  at android.os.Parcel.readException(Parcel.java:1248) 
11-16 18:26:34.673: WARN/System.err(4990):  at com.android.internal.telephony.ISms$Stub$Proxy.sendText(ISms.java:526) 
11-16 18:26:34.673: WARN/System.err(4990):  at android.telephony.SmsManager.sendTextMessage(SmsManager.java:109) 
11-16 18:26:34.673: WARN/System.err(4990):  at android.telephony.SmsManager.sendMultipartTextMessage(SmsManager.java:263) 
11-16 18:26:34.673: WARN/System.err(4990):  at z.z.z.service.SMSService.sendSMS(SMSService.java:109) 
11-16 18:26:34.673: WARN/System.err(4990):  at z.z.z.receiver.IncomingSMSService.onStart(IncomingSMSService.java:64) 
11-16 18:26:34.677: WARN/System.err(4990):  at android.app.Service.onStartCommand(Service.java:420) 
11-16 18:26:34.677: WARN/System.err(4990):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053) 
11-16 18:26:34.677: WARN/System.err(4990):  at android.app.ActivityThread.access$3600(ActivityThread.java:125) 
11-16 18:26:34.677: WARN/System.err(4990):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096) 
11-16 18:26:34.677: WARN/System.err(4990):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-16 18:26:34.677: WARN/System.err(4990):  at android.os.Looper.loop(Looper.java:123) 
11-16 18:26:34.677: WARN/System.err(4990):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-16 18:26:34.677: WARN/System.err(4990):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-16 18:26:34.677: WARN/System.err(4990):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-16 18:26:34.677: WARN/System.err(4990):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) 
11-16 18:26:34.681: WARN/System.err(4990):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
11-16 18:26:34.681: WARN/System.err(4990):  at dalvik.system.NativeStart.main(Native Method) 

这里是我的代码,当任何消息会出现,然后我的广播接收器将调用。从那开始,我开始从收件箱中获取未读邮件的服务以及我将作为消息发送的邮件。

我收到了收件箱中的邮件,但是当我将该邮件作为消息发送时,我得到了“空指针异常”。

请任何人都可以告诉我我错在哪里?

编辑:

我发现,当我在消息中发送文本的长度,然后它会给我空指针异常。正如我在谷歌搜索,我发现这是problrm解决使用sendMultipartTextMessage instaed使用sendTextMessage。但我已经使用过这种方法,为什么我会得到这个错误?

谢谢。

+1

post logcat output – Vladimir

+0

在您的问题中包含来自异常的堆栈跟踪。我不认为有人想在没有更多信息的情况下筛选代码来指导他们。 –

+0

我编辑我的logcat错误。 – anddev

回答

2

你好,我得到solution。我很高兴与大家分享。我用

ArrayList messages = sms.divideMessage(message);

SmsManager sms = SmsManager.getDefault(); 
ArrayList<String> messages = sms.divideMessage(message); 
sms.sendMultipartTextMessage(destNumber, null, messages, ayySentPI, ayyDeliveredPI);