2012-04-01 4 views
0

Я добавил EditText, Button и ListView в свой файл main.xml. Пользователь вводит полное имя или несколько алфавитов имени и нажимает кнопку. Событие кнопки Click отображает все имена и телефонные номера, присутствующие в списке контактов, соответствующем пользовательскому запросу.Исключение исключения поставщика контента

Это мой код функции OnClick:

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, editText.getText().toString()); 
    Cursor idCursor = getContentResolver().query(lookupUri, null, null, null, null); 

    startManagingCursor(idCursor);   

    String wherestmt = ContactsContract.Data.CONTACT_ID + " = " + idCursor + " And " + ContactsContract.Data.MIMETYPE + " = " + ContactsContract.CommonDataKinds.Phone.CONTENT_URI + "'";   
    Cursor datacursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,null,wherestmt,null,null); 

    int nameIdx = datacursor.getColumnIndexOrThrow(ContactsContract.Data.DISPLAY_NAME); 
    int phoneIdx = datacursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER); 

    datacursor.moveToFirst(); 

    list = new ArrayList<String>(); 

    do{ 

     String name = datacursor.getString(nameIdx); 
     String phone = datacursor.getString(phoneIdx); 
     list.add(name + " " + phone);   

    }while(datacursor.moveToNext()); 

    ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,list); 
    listView.setAdapter(adapter); 

Но я получаю исключение в следующей строке:

Cursor datacursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,null,wherestmt,null,null); 

Исключение говорит что-то вроде:

android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 


FATAL EXCEPTION: main E/AndroidRuntime(1287): android.database.sqlite.SQLiteException: near "@412c63d0": syntax error: ,[email protected] And mimetype = 'content://com.android.contacts/data/phones')) 04-01 13:48:46.616: E/AndroidRuntime(1287): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179) 04-01 13:48:46.616: E/AndroidRuntime(1287): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 
+0

любая помощь ??????? – WhoAmI

ответ

0

Возможно, у вас есть ошибка, вы забыли ' перед ContactsContract.CommonDataKinds.Phone.CONTENT_URI:

String wherestmt = ContactsContract.Data.CONTACT_ID + " = " + idCursor + " And " + ContactsContract.Data.MIMETYPE + " = " + ContactsContract.CommonDataKinds.Phone.CONTENT_URI + "'"; 

изменение:

String wherestmt = ContactsContract.Data.CONTACT_ID + " = " + idCursor + " And " + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Phone.CONTENT_URI + "'"; 
+0

Да, это была ошибка, я исправил ее и снова попробовал запустить приложение, но получил то же исключение :( Пожалуйста, помогите – WhoAmI

+0

нужно полное сообщение об ошибке logcat, и вы забыли добавить разрешение контактов? – idiottiger

+0

Я добавил эту строку в файл манифеста. Я не могу правильно сохранить ошибку logcat, dnt knw точная причина ..... когда она сохраняется на рабочем столе, ita пустой журнал файл. Вы знаете причины этого? – WhoAmI

0

вы проверка NULL или Empty на editText.getText().toString());. Я думаю, вот в чем проблема.

+0

при тестировании приложения на эмуляторе, я вводил некоторые значения, прежде чем нажимать кнопку для извлечения записей, поэтому в этом случае мне нужно поместить пустую или пустую проверку поля EditText? я не думаю, что по этой причине – WhoAmI

+0

вы можете проверить, чтобы быть уверенным, что это всегда хорошая идея, чтобы дважды проверить. – Mayank

+0

было то, что ваша проблема ???? мой плохой, я подумал об этом и сказал себе, что это слишком очевидно ... хорошо, что ты его работаешь. – Mayank

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