Android: SMSManager – Intento de obtener longitud de matriz nula

Tengo un error del SMSManager cuando intento enviar un mensaje con el método sendTextMesasge . Me devuelve una java.lang.NullPointerException: Attempt to get length of null array .

Hay mi código:

  // Constructs the message TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String myPhoneNumber = mTelephonyMgr.getLine1Number(); String destNumber = taskManager.getHelpCenterNumber(); String message = getResources().getString(R.string.call_me_message) + " " + myPhoneNumber+"."; // Sends the message SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(destNumber, null, message, null, null); 

El LogCat recibe este mensaje:

 08-03 09:59:10.548: E/AndroidRuntime(19825): FATAL EXCEPTION: main 08-03 09:59:10.548: E/AndroidRuntime(19825): Process: com.solarsquareretailer.view, PID: 19825 08-03 09:59:10.548: E/AndroidRuntime(19825): java.lang.NullPointerException: Attempt to get length of null array 08-03 09:59:10.548: E/AndroidRuntime(19825): at android.os.Parcel.readException(Parcel.java:1546) 08-03 09:59:10.548: E/AndroidRuntime(19825): at android.os.Parcel.readException(Parcel.java:1493) 08-03 09:59:10.548: E/AndroidRuntime(19825): at com.android.internal.telephony.ISms$Stub$Proxy.sendText(ISms.java:1428) 08-03 09:59:10.548: E/AndroidRuntime(19825): at android.telephony.SmsManager.sendTextMessage(SmsManager.java:305) 08-03 09:59:10.548: E/AndroidRuntime(19825): at com.solarsquareretailer.view.MainActivity.onOptionsItemSelected(MainActivity.java:245) 

Encontré mi destNumber era nulo y no correcto (No es un número de teléfono). Es por eso que tengo una java.lang.NullPointerException.

He encontrado esto varias veces en mi aplicación en la naturaleza (pero nunca en mis pruebas), y trató de encontrar una solución durante meses. Hasta ahora no pude encontrar un caso de prueba que lo reproduzca.

Utilización del método Sms.sendMultipartTextMessage :

 SmsManager sms = SmsManager.getDefault(); ArrayList<String> parts = sms.divideMessage(msg); sms.sendMultipartTextMessage(number, null, parts, null, null); 

No ayuda tampoco – ya que internamente termina llamando a sendTextMessage si el mensaje tiene sólo una parte – pero de todos modos, podría ser una buena idea si cambia a ella en caso de que tenga mensajes más largos.

Terminé envolviendo el código en un try-catch e informando a un servidor cada vez que sucede. Y por lo que he visto, los mensajes aparentemente "normales" parecen activarlo.

Hay un caso similar aquí , pero en ese caso el mensaje tiene una PendingIntent para enviar. Tal vez quieras intentarlo.

Primero, necesitas permiso en AndroidManifest.xml para leer Estado del teléfono

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

A continuación, intente obtener el Número de dispositivo móvil en Bloque de captura de intento.

Puede suceder que getLine1Number () devuelva valor nulo. Por lo que necesita manejar la excepción

 try { myPhoneNumber = mTelephonyMgr.getLine1Number(); } catch(NullPointerException ex) { } 
  • Enviar SMS hasta que tenga éxito
  • SendMultipartTextMessage y monitor enviar y recibir
  • Abortar SMS Intent en Android KitKat
  • SMS GENERIC FAILURE en teléfonos Dual Sim Android
  • Administrador de sms de Android no envía sms
  • ¿Cómo enviar un SMS usando SMSmanager en Dual SIM móvil?
  • ¿Cómo puedo enviar mensajes SMS en el BACKGROUND usando Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.