2012-10-26 7 views
0

잘못된 번호로 문자 메시지를 보내려고하면 NullPointerException이 발생합니다. 잘못된 문자는 영문자가 포함 된 전화 번호 등을 의미하며 out-of-service 번호는 아닙니다.)sendTextMessage() 잘못된 전화 번호가 지정된 경우 NullPointerException이 발생합니다.

내가 사용하는 코드는이 튜토리얼에서이다 : 사용자가 잘못된 전화 번호가 가장없는 입력 발생할 때 http://mobiforge.com/developing/story/sms-messaging-android

//---sends an SMS message to another device--- 
private 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(){ 
     @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);   
} 

이 응용 프로그램 충돌을 가졌어요. 그래서 제 질문은이 문제를 해결하기위한 좋은 접근 방법이 될 것입니다.

이 코드에서 NullPointerExceptions를 잡아서 토스트 오류가 발생할 수 있지만 NullPointerException이 다른 오류 (예 : 메시지가 너무 길고 여러 부분이어야합니다.

또 다른 해킹 방법은 EditText가 숫자와 '+'문자 만 허용하도록 제한하는 것입니다.

이러한 솔루션 중 하나에 만족스럽지 않습니다. sendTextMessage 메소드가보다 유익한 예외를 발생 시키거나 이에 대한 오류 코드를 브로드 캐스트해야하는 것이 이상적입니다.

+0

당신은 예외를 얻고있다? –

답변

0

edittext의 입력 유형을 전화 번호로 설정하면 잘 작동합니다. 가리키는 위해 awadm하는

android:inputType="phone" 

감사 : 숫자의 조합은 예외를 발생하지 않는 것 "전화 번호"입력 위젯을 통해 (예 : "#의 *() 123") XML에서

를 입력 나에게 맞는 방향으로의

관련 문제