单击ImageView时android中的异常

时间:2014-09-07 11:36:05

标签: android exception imageview

我试图在我的Android应用程序中从手机中读取联系人并将其显示在GridView中。我希望在点击ImageView时开始阅读联系人。这是代码:

img7.setOnClickListener(new OnClickListener() {         // img7 is object of ImageView

        @Override
        public void onClick(View v) {
            // startActivity(new Intent(Contacts.this, SyncContacts.class));
            // fetchContacts();

            Cursor cursor = getContentResolver().query(
                    ContactsContract.Contacts.CONTENT_URI,
                    null,
                    ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1",
                    null,
                    "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME
                            + ") ASC");
            count = cursor.getCount();

            if (cursor.getCount() > 0) {

                while (cursor.moveToNext()) {

                    String contact_id = cursor.getString(cursor
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cursor.getString(cursor
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor
                            .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));

                    if (hasPhoneNumber > 0) {

                        array.add("" + name);
                        Cursor phoneCursor = getContentResolver()
                                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                + " = ?",
                                        new String[] { contact_id }, null);

                        while (phoneCursor.moveToNext()) {

                            phoneNumber = phoneCursor.getString(phoneCursor
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            // array.add("" + phoneNumber);

                        }
                        phoneCursor.close();
                        db.insert(name, phoneNumber);
                    }
                }
                gv.setAdapter(new ListArray(Contacts.this, array, imageId));
                Toast.makeText(getBaseContext(),
                        count + " contacts synced successfully",
                        Toast.LENGTH_LONG).show();
            }

        }
    });

当点击ImageView时,我的应用程序崩溃,在Eclipse中显示以下异常。

09-07 16:55:16.058: E/AndroidRuntime(889): FATAL EXCEPTION: main
09-07 16:55:16.058: E/AndroidRuntime(889): java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts from pid=889, uid=10044 requires android.permission.READ_CONTACTS, or grantUriPermission()
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.os.Parcel.readException(Parcel.java:1425)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.content.ContentResolver.query(ContentResolver.java:370)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.content.ContentResolver.query(ContentResolver.java:313)
09-07 16:55:16.058: E/AndroidRuntime(889):  at com.example.firstpage.Contacts$1.onClick(Contacts.java:48)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.view.View.performClick(View.java:4084)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.view.View$PerformClick.run(View.java:16966)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.os.Handler.handleCallback(Handler.java:615)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.os.Looper.loop(Looper.java:137)
09-07 16:55:16.058: E/AndroidRuntime(889):  at android.app.ActivityThread.main(ActivityThread.java:4745)
09-07 16:55:16.058: E/AndroidRuntime(889):  at java.lang.reflect.Method.invokeNative(Native Method)
09-07 16:55:16.058: E/AndroidRuntime(889):  at java.lang.reflect.Method.invoke(Method.java:511)
09-07 16:55:16.058: E/AndroidRuntime(889):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-07 16:55:16.058: E/AndroidRuntime(889):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-07 16:55:16.058: E/AndroidRuntime(889):  at dalvik.system.NativeStart.main(Native Method)

当我点击此异常时(09-07 16:55:16.058:E / AndroidRuntime(889):在com.example.firstpage.Contacts $ 1.onClick(Contacts.java:48)),它指向< / p>

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", null,"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME+ ") ASC");

有谁能告诉我为什么会出现这种异常以及如何纠正它?

1 个答案:

答案 0 :(得分:0)

在清单文件中添加此权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>