Java Android:SMSManager-尝试获取空数组的长度
当我尝试使用方法Java Android:SMSManager-尝试获取空数组的长度,java,android,smsmanager,Java,Android,Smsmanager,当我尝试使用方法sendTextMesasge发送消息时,SMSManager出现了一个错误。它返回一个java.lang.NullPointerException:尝试获取空数组的长度 这是我的代码: // Constructs the message TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
sendTextMesasge
发送消息时,SMSManager出现了一个错误。它返回一个java.lang.NullPointerException:尝试获取空数组的长度
这是我的代码:
// 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);
LogCat收到以下消息:
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)
我在野外的应用程序中多次发现了这一点(但从未在测试中发现),几个月来我一直试图找到解决方案。到目前为止,我还没有找到一个复制它的测试用例
使用以下方法:
smsmsmanager sms=smsmsmanager.getDefault();
arraylistparts=sms.divideMessage(msg);
sms.sendMultipartTextMessage(数字、空、部分、空、空);
也没有帮助-因为在内部,如果消息只有一部分,它会调用sendTextMessage-但是无论如何,如果您切换到它,以防有更长的消息,这可能是一个好主意
最后,我将代码包装在一个try-catch中,并在任何时候向服务器报告。据我所见,看似“正常”的信息似乎触发了它
也有类似的情况,但在这种情况下,消息有一个待发送的挂起内容。您可能想试试。首先,您需要在AndroidManifest.xml中获得读取电话状态的权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
发现我的电话号码为空且不正确(不是电话号码)。这就是为什么我有一个java.lang.NullPointerException。是的,我的AndroidManifest上有这一行。我尝试您的方法检查问题出在哪里:)
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
try
{
myPhoneNumber = mTelephonyMgr.getLine1Number();
}
catch(NullPointerException ex)
{
}