Am trying to read contacts from phone in my android app and display them in a GridView. I wish to start reading contacts when clicked on a ImageView. This is the code :
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();
}
}
});
When clicked on the ImageView my app crashes by displaying the following exceptions in 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)
When I clicked on this exception ( 09-07 16:55:16.058: E/AndroidRuntime(889): at com.example.firstpage.Contacts$1.onClick(Contacts.java:48) ), it pointed at
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", null,"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME+ ") ASC");
Can anyone tell me why this exceptions occured and how to correct it ?
0 comments:
Post a Comment