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)
{
}