2012-05-22 4 views
4

Я пишу приложение MMS/SMS на корневом Android 2.3.3 htc невероятно S с чувством 2.1. Теперь, пытаясь получить определенный список контактов SMS/MMS, я получаю FC в запросе.Запрос ContentResolver бросает nullpointerException

Вот код:

Uri uri = Uri.parse("content://mms-sms/conversations/"+String.valueOf(thread_id)); 
ContentResolver cr = context.getContentResolver(); 
Cursor c= cr.query(uri,null,null,null,null); //crashing here 

LogCat:

05-22 15:24:24.273: E/AndroidRuntime(32087): FATAL EXCEPTION: main 
05-22 15:24:24.273: E/AndroidRuntime(32087): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.uiu.messaging/com.uiu.messaging.ContactMessageChain}: java.lang.NullPointerException 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.os.Looper.loop(Looper.java:143) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.main(ActivityThread.java:4196) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at java.lang.reflect.Method.invokeNative(Native Method) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at java.lang.reflect.Method.invoke(Method.java:507) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at dalvik.system.NativeStart.main(Native Method) 
05-22 15:24:24.273: E/AndroidRuntime(32087): Caused by: java.lang.NullPointerException 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.os.Parcel.readException(Parcel.java:1328) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:372) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.content.ContentProviderProxy.query(ContentProviderNative.java:408) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.content.ContentResolver.query(ContentResolver.java:264) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at com.uiu.messaging.Data.getContactChain(Data.java:319) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at com.uiu.messaging.ContactMessageChain.onCreate(ContactMessageChain.java:138) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
05-22 15:24:24.273: E/AndroidRuntime(32087): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780) 
05-22 15:24:24.273: E/AndroidRuntime(32087): ... 11 more 

Все права учитываются.

Любая помощь будет принята с благодарностью.

EDIT:

Выполнив предложение Майка я получаю следующее сообщение об ошибке в LogCat:

05-22 16:31:46.178: E/AndroidRuntime(1892): FATAL EXCEPTION: main 
05-22 16:31:46.178: E/AndroidRuntime(1892): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.uiu.messaging/com.uiu.messaging.ContactMessageChain}: android.database.sqlite.SQLiteException: near "*": syntax error: , while compiling: SELECT * FROM (SELECT DISTINCT date * 1 AS normalized_date, NULL AS * FROM sms WHERE (htc_category= 0 AND thread_id = 25 AND (type != 3 AND type > 0)) UNION SELECT DISTINCT date * 1000 AS normalized_date, NULL AS * FROM pdu LEFT JOIN pending_msgs ON pdu._id = pending_msgs.msg_id WHERE (htc_category= 0 AND thread_id = 25 AND msg_box != 3 AND (msg_box > 0 AND msg_box != 3 AND (m_type = 128 OR m_type = 132 OR m_type = 130))) ORDER BY normalized_date ASC) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.os.Looper.loop(Looper.java:143) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.app.ActivityThread.main(ActivityThread.java:4196) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at dalvik.system.NativeStart.main(Native Method) 
05-22 16:31:46.178: E/AndroidRuntime(1892): Caused by: android.database.sqlite.SQLiteException: near "*": syntax error: , while compiling: SELECT * FROM (SELECT DISTINCT date * 1 AS normalized_date, NULL AS * FROM sms WHERE (htc_category= 0 AND thread_id = 25 AND (type != 3 AND type > 0)) UNION SELECT DISTINCT date * 1000 AS normalized_date, NULL AS * FROM pdu LEFT JOIN pending_msgs ON pdu._id = pending_msgs.msg_id WHERE (htc_category= 0 AND thread_id = 25 AND msg_box != 3 AND (msg_box > 0 AND msg_box != 3 AND (m_type = 128 OR m_type = 132 OR m_type = 130))) ORDER BY normalized_date ASC) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:372) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.content.ContentProviderProxy.query(ContentProviderNative.java:408) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.content.ContentResolver.query(ContentResolver.java:264) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at com.uiu.messaging.Data.getContactChain(Data.java:318) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at com.uiu.messaging.ContactMessageChain.onCreate(ContactMessageChain.java:138) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780) 
05-22 16:31:46.178: E/AndroidRuntime(1892):  ... 11 more 

Я понятия не имею, что случилось с заявлением SQL ...

+1

Прикрепление трассировки стека от logcat обычно разумно. – Jens

+0

Какова ценность uri перед вызовом запроса? – MikeIsrael

+1

, как написано выше, thread_id длинный – zwebie

ответ

4

ОК, исправлено. трюк состоял в том, чтобы ввести имена фактических столбцов в проекцию. Кажется, что ошибка была андроидой.

1

В соответствии с этим другой ответ, второй параметр не должен быть нулевым (хотя в документации указано, что это действительное значение), попробуйте

final String[] projection = new String[]{"*"}; 
Cursor query = contentResolver.query(uri, projection, null, null, null); 

original post

+0

Это неверно. В [** documentation **] (http://tinyurl.com/cl7ygch) указано, что аргумент 'projection' - это« Список столбцов, помещаемых в курсор ». Если« null »все столбцы включены». –

+0

@AlexLockwood Да, я видел это в документации, но так как он получал ошибку, подумал о возможности ошибки в Android. Я считаю, что если он добавит проекцию, кроме «*», он вернет пустой набор без ошибки, что еще раз укажет на возможную ошибку андроида. – MikeIsrael

+0

Я использовал 'ContentProvider' раньше и могу заверить вас, что это не ошибка в документации ... передача' null' вполне приемлема. –

Смежные вопросы