gpt4 book ai didi

android - sendDataMessage 总是导致空指针异常

转载 作者:行者123 更新时间:2023-11-29 18:12:50 24 4
gpt4 key购买 nike

希望我能在我遇到的问题上得到一些帮助。我正在使用“android.telephony.SmsManager”类通过调用 API 函数发送数据文本消息:“sendDataMessage(...)”,每次调用该函数时,我都会得到一个空指针异常。我进行了研究,发现这可能是由于尝试发送过大的数据消息(大约 133 字节或更多)造成的。我发送 5 个字节 - 所以我知道我没有超出限制。我在模拟器上没有出现空指针异常(尽管我知道模拟器还存在其他问题,无法正确发送数据 SMS 消息,所以如果模拟器正常工作,我可能会收到错误消息)。我的代码如下:

SmsManager sm = SmsManager.getDefault();
int SMS_PORT = 8091;
sm.sendDataMessage("5555551212", null, (short)SMS_PORT, "hello".getBytes(), null, null);

根据 API 文档,我在上面作为“null”的 3 个参数允许为 null。我还尝试将 Intent 发送到最后 2 个参数,并在第二个参数中发送一个字符串,但仍然出现空指针异常。

请注意,当我在我的 Android 手机上运行时出现此异常。我在 gingerbread 上运行,并且为 GB 使用正确的 API 级别。我的 android manafest 文件确实具有发送 SMS 的适当权限。

空指针异常的logcat如下:

E/AndroidRuntime( 1690): FATAL EXCEPTION: main
E/AndroidRuntime( 1690): java.lang.IllegalStateException: Could not execute method of the activity
E/AndroidRuntime( 1690): at android.view.View$1.onClick(View.java:2144)
E/AndroidRuntime( 1690): at android.view.View.performClick(View.java:2485)
E/AndroidRuntime( 1690): at android.view.View$PerformClick.run(View.java:9081)
E/AndroidRuntime( 1690): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 1690): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 1690): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 1690): at android.app.ActivityThread.main(ActivityThread.java:3686)
E/AndroidRuntime( 1690): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1690): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 1690): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
E/AndroidRuntime( 1690): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
E/AndroidRuntime( 1690): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1690): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 1690): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1690): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 1690): at android.view.View$1.onClick(View.java:2139)
E/AndroidRuntime( 1690): ... 11 more
E/AndroidRuntime( 1690): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 1690): at android.os.Parcel.readException(Parcel.java:1328)
E/AndroidRuntime( 1690): at android.os.Parcel.readException(Parcel.java:1276)
E/AndroidRuntime( 1690): at com.android.internal.telephony.ISms$Stub$Proxy.sendData(ISms.java:359)
E/AndroidRuntime( 1690): at android.telephony.SmsManager.sendDataMessage(SmsManager.java:212)
E/AndroidRuntime( 1690): at com.test.datasmstest.DataSMSTestActivity.DoClick(DataSMSTestActivity.java:55)
E/AndroidRuntime( 1690): ... 14 more

任何想法 - 更多信息是否有助于解决此问题?

谢谢!

最佳答案

我已经弄清楚发生了什么事 - 我使用的是 sprint 手机,而 sprint 不允许数据(二进制)文本消息。我之所以知道这一点,是因为我采用了生成上述空指针异常的同一个应用程序,并在非 sprint 手机(在本例中为 t-mobile)上运行它。数据短信发送成功。我将它发送到我的 sprint 手机上的一个端口,发送短信的 t-mobile 手机收到了以下基于文本的消息:

[Free Msg: Unable to send message to 15555551212. Please try again without a symbol in the text.]

15555551212 是我的冲刺电话号码所在的位置(出于显而易见的原因隐藏)。

因此,上面的代码似乎在某些运营商的手机上运行良好,但在其他手机上运行不佳。我猜我手机上 android 的 sprints 实现没有正确实现 sendDataMessage(或故意杀死该函数),因此它抛出了一个空指针异常。

关于android - sendDataMessage 总是导致空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9760735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com