Здравствуйте, я получил исключение NullPointerException при отправке сообщения, я не могу понять, почему это произошло.я разместил свой код ниже: -
BroadCastReceiver: -
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);
}
}
МОИ ошибки 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)
Вот мой код. Когда придет какое-либо сообщение, вызовет мой BroadCastReceiver.С этого момента я запустил сервис для получения непрочитанных сообщений из входящих сообщений, и эти сообщения я буду отправлять как сообщение.
Я получил сообщение из папки «Входящие», но когда я отправляю эти сообщения как сообщение, я получаю «Исключение Nullpointer».
Пожалуйста, кто-нибудь может сказать мне, где я не прав?
РЕДАКТИРОВАТЬ:
Я обнаружил, что когда я отправляю длину текста в сообщении, это даст мне исключение NullPointer.Когда я искал в Google, я обнаружил, что проблема решается с помощью sendMultipartTextMessage вместо использования sendTextMessage .Но я уже использовал этот метод, так почему я получаю эту ошибку?
Спасибо.