2011-01-02 39 views
8

Vì vậy, tôi có được đống này dấu vết:Tại sao tôi nhận được NullPointerException khi gửi SMS trên HTC Desire hoặc SubmitPdu là gì?

java.lang.NullPointerException  
    at android.telephony.SmsMessage$SubmitPdu.<init>(SmsMessage.java:132) 
    at android.telephony.SmsMessage.getSubmitPdu(SmsMessage.java:551) 
    at android.telephony.SmsManager.sendTextMessage(SmsManager.java:228) 
    at android.telephony.SmsManager.sendTextMessage(SmsManager.java:107) 
    at com.emergency.button.SMSSender.safeSendSMS(SMSSender.java:91) 
    at com.emergency.button.EmergencyActivity$EmergencyThread 
     .sendSMS(EmergencyActivity.java:294) 
    at com.emergency.button.EmergencyActivity$EmergencyThread 
     .sendMessages(EmergencyActivity.java:386) 
    at com.emergency.button.EmergencyActivity$EmergencyThread 
     .run(EmergencyActivity.java:266) 

Và đây là cách tôi gọi sendTextMessage, tôi không xác minh độ dài tin nhắn hoặc số điện thoại hợp lệ:

sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

Lỗi này dường như chỉ xảy ra trên HTC Desire hoặc HTC Wildfire với phiên bản Android 2.2 hoặc 2.21 để tôi đào lên nguồn nền tảng Android (thực sự không dễ như tôi mong đợi) và tìm thấy:
SmsMessage.java once upon a time mặc dù điều này có thể không liên quan khi tôi thấy một số số dòng không xếp hàng.
emergency button project là nguồn mở để bạn có thể kiểm tra mã để tham khảo. Tôi có lẽ nên lưu ý rằng tôi không thể kiểm tra bản thân mình, tôi không có một trong hai mô hình điện thoại.

+0

đang sử dụng tuyên bố nó đang bị rơi (lực đóng hoặc tương tự)? Tôi đã thử các ứng dụng từ Desire của tôi và nó làm việc mà không có một vấn đề - cả email và tin nhắn sms gửi thành công. PDU là viết tắt của Protocol Data Unit. – Squonk

+0

Báo cáo thị trường android bị treo và tôi cũng có một trình theo dõi ngăn xếp được tích hợp. Vì vậy, yeah, nó đang bị rơi. Cảm ơn các thông tin và thử nghiệm, tôi tự hỏi chính xác những gì đang xảy ra. – ubershmekel

+0

xem câu trả lời/phản hồi của tôi – Squonk

Trả lời

17

Bạn có thể gặp sự cố này với một thông báo quá dài. Tôi không biết tại sao nó sẽ chỉ xảy ra cho một số điện thoại, mặc dù.

http://code.google.com/p/android/issues/detail?id=3718

+6

Tôi tin rằng đó là vấn đề. Sau khi chuyển từ sendTextMessage sang sendMultipartTextMessage, ngoại lệ sẽ không bao giờ trở lại. Google thực sự cần phải ném một ngoại lệ mô tả hơn ở đó. – ubershmekel

0

Không một câu trả lời nhưng quá lâu để gửi trong một bình luận ...

Tôi nghĩ rằng bạn có thể có nhiều vấn đề - không có ý tưởng gì này có nghĩa đối với bạn nhưng tôi đã mong muốn của tôi nối với DDMS và đưa nó một sự cố gắng. Các tin nhắn SMS và email đã được gửi mà không có vấn đề (không có lỗi trên stack theo dõi) nhưng đây là những gì tôi nhận được khi sử dụng nút BACK từ hoạt động cho thấy tiến độ (chờ đợi cho vị trí, email gửi, tin nhắn SMS gửi vv).

01-03 02:57:11.335: ERROR/ActivityThread(14514): Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
01-03 02:57:11.335: ERROR/ActivityThread(14514): android.app.IntentReceiverLeaked: Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.<init>(ActivityThread.java:972) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:755) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:799) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:786) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:780) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at com.emergency.button.SMSSender.safeSendSMS(SMSSender.java:75) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at com.emergency.button.EmergencyActivity$EmergencyThread.sendSMS(EmergencyActivity.java:294) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at com.emergency.button.EmergencyActivity$EmergencyThread.sendMessages(EmergencyActivity.java:386) 
01-03 02:57:11.335: ERROR/ActivityThread(14514):  at com.emergency.button.EmergencyActivity$EmergencyThread.run(EmergencyActivity.java:266) 
01-03 02:57:11.345: ERROR/ActivityThread(14514): Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
01-03 02:57:11.345: ERROR/ActivityThread(14514): android.app.IntentReceiverLeaked: Activity com.emergency.button.EmergencyActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.<init>(ActivityThread.java:972) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:755) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:799) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:786) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:780) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at com.emergency.button.SMSSender.safeSendSMS(SMSSender.java:50) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at com.emergency.button.EmergencyActivity$EmergencyThread.sendSMS(EmergencyActivity.java:294) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at com.emergency.button.EmergencyActivity$EmergencyThread.sendMessages(EmergencyActivity.java:386) 
01-03 02:57:11.345: ERROR/ActivityThread(14514):  at com.emergency.button.EmergencyActivity$EmergencyThread.run(EmergencyActivity.java:266) 
+0

Tôi đoán có nghĩa là tôi cần phải hủy đăng ký người nhận sau khi hoàn tất với họ. Nó sẽ là lạ mặc dù bởi vì họ sẽ cần phải unregister mình. http://code.google.com/p/emergencybutton/source/browse/trunk/src/com/emergency/button/SMSSender.java?r=24 – ubershmekel

0

Bạn phải unregister sms gửi reciever ý định và sms giao ý định sau khi sử dụng, Một điều bạn có thể làm bố Receivers ý định như lớp riêng biệt kéo dài BraodCast, Sau đó, bạn có thể unregister người nhận.

+0

Bạn có nghĩ rằng đó là nguyên nhân gây ra java.lang.NullPointerException trong getSubmitPdu ? – ubershmekel

+0

Xem câu trả lời của JohnWayner, vấn đề được tham chiếu tóm tắt nó khá độc đáo. – Kingsolmn

7

Thay

sms.sendDataMessage(destinationAddress, scAddress, destinationPort, data, sentIntent, deliveryIntent) 

bởi

sms.sendMultipartTextMessage(phoneNumber, null, message, null, null); 

Thông điệp của bạn phải là một ArrayList cho rằng, sử dụng phương pháp này trước khi gọi sendSMS

SmsManager sms = SmsManager.getDefault(); 
ArrayList<String> parts = sms.divideMessage(locationMessage); 
sendSMS(telNumber.getText().toString(),parts); 
+0

đây là câu trả lời và trên Desire S – Mark

Các vấn đề liên quan