Iam getting a null pointer exception while sending some string text as an sms to other emulator.I have a button which on clicking will send the text present in the textView as an sms to other emulator.
Here is the code of textview and button class
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout开发者_如何学编程.ticketprocess);
SecureMessagesActivity sma = new SecureMessagesActivity();
message = sma.getMessageBody();
tv= (TextView) findViewById(R.id.textView1);
tv.setText(message);
submit = (Button) findViewById(R.id.button1);
submit.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
SendSms sms = new SendSms();
sms.sendSMS("15555215556", message);
}});
}
and here is the code of sendsms class
public class SendSms extends Activity {
public void sendSMS(String phoneNumber, String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
//---when the SMS has been sent---
registerReceiver(new BroadcastReceiver(){
@SuppressWarnings("deprecation")
@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();
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;
}
}
}, 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();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
}
now on clicking the button the device gets force close message, the error in logcat is
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): FATAL EXCEPTION: main
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): java.lang.NullPointerException
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.app.PendingIntent.getBroadcast(PendingIntent.java:226)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at com.mypackage.ULWAFMS1.SendSms.sendSMS(SendSms.java:38)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at com.mypackage.ULWAFMS1.page1$1.onClick(page1.java:43)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.view.View.performClick(View.java:2408)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.view.View$PerformClick.run(View.java:8816)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.os.Handler.handleCallback(Handler.java:587)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.os.Handler.dispatchMessage(Handler.java:92)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.os.Looper.loop(Looper.java:123)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at java.lang.reflect.Method.invokeNative(Native Method)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at java.lang.reflect.Method.invoke(Method.java:521)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-14 17:47:47.249: ERROR/AndroidRuntime(8403): at dalvik.system.NativeStart.main(Native Method)
The problem is occurring where you are creating your PendingIntent
objects at the start of your sendSms
method. You are implementing SendSMS as an activity, but I don't think that it needs to be, and it is not being correctly initialised as an Activity, so you are seeing this failure.
Take out the extends Activity
from your sendsms class, and change your sendSms method to start as follows:
public class SendSms {
public void sendSMS(Context context, String phoneNumber, String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(context, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0,
new Intent(DELIVERED), 0);
Now you'll need to call it as sendSms( this, "15555215556", message );
from your onClickListener
;
精彩评论