开发者

android sms null pointer exception

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;

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜