Android应用程序在查询联系人后崩溃

Android应用程序在查询联系人后崩溃,android,runtime-error,Android,Runtime Error,执行以下代码后,我希望通过TextView resultText显示联系人列表 预期成果: 但是,它在执行游标c=cr.querycontacts,projection,null,null,null;后崩溃;。未显示错误日志EXED5。我已经在AndroidManifest.xml中添加了权限: 错误日志: 如何解决这个问题 感谢您的关注。只需查询以下Uri:ContactsContract.CommonDataTypes.Phone.CONTENT\u Uri我已经尝试过,但结果仍然相同。代码

执行以下代码后,我希望通过TextView resultText显示联系人列表

预期成果:

但是,它在执行游标c=cr.querycontacts,projection,null,null,null;后崩溃;。未显示错误日志EXED5。我已经在AndroidManifest.xml中添加了权限:

错误日志:

如何解决这个问题


感谢您的关注。

只需查询以下Uri:ContactsContract.CommonDataTypes.Phone.CONTENT\u Uri我已经尝试过,但结果仍然相同。代码:Uri contacts=contacts contract.commonDataTypes.Phone.CONTENT\u Uri;然后我们需要一个错误日志,只需尝试使用try-catch打印错误日志。尝试@pskink的方法。
1 Peter 1 234-567-8
2 Sam 1122-334-4
3 Mary 1 357-246-8
 <uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>
Log.d(TAG, "EXED1");
Uri contacts = Contacts.CONTENT_URI;
Log.d(TAG, "EXED2");
String[] projection = {
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.Contacts.HAS_PHONE_NUMBER
};
Log.d(TAG, "EXED3");
ContentResolver cr = getContentResolver();
Log.d(TAG, "EXED4");
Cursor c = cr.query(contacts, projection, null, null, null);
Log.d(TAG, "EXED5");  //Not displayed in the log but it display "AndroidRuntime: Shutting down VM"

String list = "";
int column;
String idStr, nameStr, phoneStr;
Log.d(TAG, "EXED6");

c.moveToFirst();
do {
    Log.d(TAG, "EXED_7_LOOP1");
    column = c.getColumnIndex(ContactsContract.Contacts._ID);
    idStr = c.getString(column);

    column = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    nameStr = c.getString(column);

    list += idStr + " " + nameStr;

    column = c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
    if (c.getString(column).equals("1")) {
        Cursor phoneC = cr.query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + idStr,
                null,
                null
        );
        phoneC.moveToFirst();
        phoneStr = phoneC.getString(phoneC.getColumnIndex(
                ContactsContract.CommonDataKinds.Phone.NUMBER
        ));
        list += " " + phoneStr;
    }
} while(c.moveToNext());
c.close();
resultText.setText(list);
11-14 00:13:24.779 13413-13413/? I/art: Not late-enabling -Xcheck:jni (already on)
11-14 00:13:24.779 13413-13413/? I/art: Late-enabling JIT
11-14 00:13:24.781 13413-13413/? I/art: JIT created with code_cache_capacity=2MB compile_threshold=1000
11-14 00:13:24.828 13413-13413/my.company.work W/System: ClassLoader referenced unknown path: /data/app/my.company.work-1/lib/x86
11-14 00:13:25.058 13413-13413/my.company.work D/MainActivity: OK
11-14 00:13:25.059 13413-13413/my.company.work D/MainActivity: gender=M
11-14 00:13:25.081 13413-13440/my.company.work D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
11-14 00:13:25.090 13413-13413/my.company.work D/: HostConnection::get() New Host Connection established 0xab75c860, tid 13413
11-14 00:13:25.127 13413-13440/my.company.work D/: HostConnection::get() New Host Connection established 0xab75cc60, tid 13440
11-14 00:13:25.136 13413-13440/my.company.work I/OpenGLRenderer: Initialized EGL, version 1.4
11-14 00:13:25.179 13413-13440/my.company.work W/EGL_emulation: eglSurfaceAttrib not implemented
11-14 00:13:25.179 13413-13440/my.company.work W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabeea580, error=EGL_SUCCESS
11-14 00:13:25.745 13413-13413/my.company.work I/Choreographer: Skipped 33 frames!  The application may be doing too much work on its main thread.
11-14 00:13:26.590 13413-13413/my.company.work D/MainActivity: Button 1 Clicked
11-14 00:13:26.602 13413-13413/my.company.work D/MainActivity: Button 1 Code Executed
11-14 00:13:26.640 13413-13413/my.company.work D/PhoneBookSearchActivity: Activity Started
11-14 00:13:26.687 13413-13440/my.company.work W/EGL_emulation: eglSurfaceAttrib not implemented
11-14 00:13:26.688 13413-13440/my.company.work W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabeea9c0, error=EGL_SUCCESS
11-14 00:13:26.811 13413-13440/my.company.work E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab74ec30
11-14 00:13:26.822 13413-13440/my.company.work D/OpenGLRenderer: endAllStagingAnimators on 0xaf7f1480 (RippleDrawable) with handle 0xab75cf30
11-14 00:13:29.530 13413-13413/my.company.work D/PhoneBookSearchActivity: Button Search All Clicked
11-14 00:13:29.530 13413-13413/my.company.work D/PhoneBookSearchActivity: EXED1
11-14 00:13:29.530 13413-13413/my.company.work D/PhoneBookSearchActivity: EXED2
11-14 00:13:29.530 13413-13413/my.company.work D/PhoneBookSearchActivity: EXED3
11-14 00:13:29.530 13413-13413/my.company.work D/PhoneBookSearchActivity: EXED4
11-14 00:13:29.532 13413-13413/my.company.work D/AndroidRuntime: Shutting down VM
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime: FATAL EXCEPTION: main
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime: Process: my.company.work, PID: 13413
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{e53f305 13413:my.company.work/u0a56} (pid=13413, uid=10056) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1599)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1552)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3550)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.app.ActivityThread.acquireProvider(ActivityThread.java:4778)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2018)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1468)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.content.ContentResolver.query(ContentResolver.java:475)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.content.ContentResolver.query(ContentResolver.java:434)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at my.company.work.PhoneBookSearchActivity.Execute_SearchAll(PhoneBookSearchActivity.java:76)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at my.company.work.PhoneBookSearchActivity.onClick(PhoneBookSearchActivity.java:53)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-14 00:13:29.532 13413-13413/my.company.work E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)