2011-07-21 6 views
0

私はcdma携帯電話からSMSを送信する必要があるが、nullポインタ例外をスローする1つのアプリケーションを実行しています。私は、それは以下のようなエラーがスローされますCDMAからSMSを送信する(htc evo)NullPointer例外を投げる

smsmanager.sendDataMessage(phonenumber, null, (short)1001, msgStr.getBytes(), sentPI, deliveredPI); 

を使用しています: -

07-21 14:53:26.875: ERROR/AndroidRuntime(8645): FATAL EXCEPTION: main 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645): java.lang.NullPointerException 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.os.Parcel.readException(Parcel.java:1253) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.os.Parcel.readException(Parcel.java:1235) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at com.android.internal.telephony.ISms$Stub$Proxy.sendData(ISms.java:558) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.telephony.SmsManager.sendDataMessage(SmsManager.java:524) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at prototype.smsonport.SmsOnPortActivity.sendSMS(SmsOnPortActivity.java:139) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at prototype.smsonport.SmsOnPortActivity.onClick(SmsOnPortActivity.java:38) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.view.View.performClick(View.java:2408) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.view.View$PerformClick.run(View.java:8817) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.os.Handler.handleCallback(Handler.java:587) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.os.Looper.loop(Looper.java:144) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-21 14:53:26.875: ERROR/AndroidRuntime(8645):  at dalvik.system.NativeStart.main(Native Method) 

をここで機能がすべてPHONENUMBER、msgStrを

 String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 

    PendingIntent senDPI = PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(SENT), 
      0); 

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

    SmsManager sms = SmsManager.getDefault(); 

    short s = Short.parseShort(portStr); 
    short port = s; 

    Log.d("Data", "Sending SMS TO :: "+phonenumber); 
    Log.d("Data", "Sending SMS MESSAGE :: "+msgStr); 
    Log.d("Data", "Sending SMS on PORT :: "+port); 

    sms.sendDataMessage(phonenumber, null, port, msgStr.getBytes(), senDPI, deliveredPI); 

で、ポートは私のXMLレイアウトファイルのEDITTEXTフィールドから来ています。 ここには何が欠けていますか? ヘルプありがとうございました。

+0

この1行のコードでは、問題を診断するには不十分です。コードをさらに投稿する必要があります。 – Squonk

+0

あなたのログには 'toStr'があります - それは電話番号ですか?もしそうなら、それはあなたのコードのどこから来ますか?また、 'phonenumber'は' sendDataMessage(...) 'の呼び出しのどこから来ますか? – Squonk

+0

また、API DEMO 8からのSMSメッセージングのサンプルコードもhtc evo CDMA電話機では機能しません – user755499

答えて

2
send.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String phoneNo = "Phone number"; 
      String message = "Content of the msg"; 
      if (phoneNo.length() > 0 && message.length() > 0) { 
       TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
       int simState = telMgr.getSimState(); 
       switch (simState) { 
       case TelephonyManager.SIM_STATE_ABSENT: 
        displayAlert(); 
        break; 
       case TelephonyManager.SIM_STATE_NETWORK_LOCKED: 
        // do something 
        break; 
       case TelephonyManager.SIM_STATE_PIN_REQUIRED: 
        // do something 
        break; 
       case TelephonyManager.SIM_STATE_PUK_REQUIRED: 
        // do something 
        break; 
       case TelephonyManager.SIM_STATE_READY: 
        // do something 
        sendSMS(phoneNo, message); 
        break; 
       case TelephonyManager.SIM_STATE_UNKNOWN: 
        // do something 
        break; 
       } 

      } else { 
       Toast.makeText(getBaseContext(), 
         "Please enter both phone number and message.", 
         Toast.LENGTH_SHORT).show(); 
      } 

     } 



private void sendSMS(String phoneNumber, String message) { 
    String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 

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

    PendingIntent deliveredPI = PendingIntent.getBroadcast(YourActivity.this, 
      0, new Intent(DELIVERED), 0); 

    // ---when the SMS has been sent--- 

    registerReceiver(new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) { 
      case Activity.RESULT_OK: 
       Toast.makeText(YourActivity.this, "SMS sent", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       Toast.makeText(YourActivity.this, "Generic failure", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       Toast.makeText(YourActivity.this, "No service", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NULL_PDU: 
       Toast.makeText(YourActivity.this, "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(YourActivity.this, "SMS delivered", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case Activity.RESULT_CANCELED: 
       Toast.makeText(YourActivity.this, "SMS not delivered", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      } 
     } 
    }, new IntentFilter(DELIVERED)); 

    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 
    Intent smsintent = new Intent(YourActivity.this, SecondActivity.Activity); 
    startActivity(smsintent); 
} 
+1

これはどのように役立つでしょうか? – Squonk

+0

@ jack-sparrowあなたが投稿したリンクは連絡先を読む方法に関するものです。私の問題は、cdma phoneからSMSを送信することです。 – user755499

+0

私は自分の答えを更新しました。それが動作します。 – Manikandan

関連する問題