试图在Android上阅读短信/彩信并发现java.lang.NullPointerException

时间:2016-12-14 23:56:52

标签: java android android-contentresolver android-mms android-sms

我正在尝试在Android上阅读短信/彩信,我已经关注了answer,在编写代码并尝试在三星设备上的Android OS 6.0.1上运行时,我得到以下异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
                      at android.os.Parcel.readException(Parcel.java:1626)
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
                      at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
                      at android.content.ContentResolver.query(ContentResolver.java:502)
                      at android.content.ContentResolver.query(ContentResolver.java:445)
                      at com.my.code.services.ListenSmsMmsService$SMSObserver.onChange(ListenSmsMmsService.java:102)

这是创建例外的代码:

        public void onChange(boolean selfChange) {
            super.onChange(selfChange);


            /*first of all we need to decide message is Text or MMS type.*/
            final String[] projection = new String[] {"*"};

            Uri mainUri = Telephony.MmsSms.CONTENT_CONVERSATIONS_URI; //URI for query


            Cursor mainCursor = contentResolver.query(mainUri, projection, null, null, null);

最后一行是导致崩溃的那一行。 即使我用过:

Uri mainUri = Uri.parse("content://mms-sms/conversations/");

final String[] projection = new String[]{"_id", "ct_t"};

或:

final String[] projection = new String[]{Telephony.MmsSms.TYPE_DISCRIMINATOR_COLUMN};
发生了崩溃。

当我尝试在ContactsContract.PhoneLookup.CONTENT_FILTER_URI上运行查询时,查询成功了。

导致崩溃的问题是什么?

2 个答案:

答案 0 :(得分:0)

这在许多其他三星设备上发生: 似乎在这些设备上,没有后缀content://mms-sms/conversations?simple=true就无法查询?simple=true-添加后缀会影响返回的列,这就是投影失败的原因。

有关此问题的更多相关信息,请参见here,尽管没有人真正知道它为什么这样运行:(

使用未记录的URI content://mms-sms/complete-conversations-您可以阅读here,这可能是一种解决方法。

答案 1 :(得分:0)

我在Samsung设备上也遇到了同样的问题,因此对于SMS对话,我尝试在SMS表here上按线程ID进行分组。

不幸的是,man似乎不像content://mms-sms/complete-conversations那样聚集在线程ID上,因此最终您会收到来自同一线程的多条消息。