2012-04-01 152 views
0

我在我的main.xml文件中添加了EditText,Button和ListView。用戶將輸入全名或一些字母的名稱,並點擊按鈕。按鈕點擊事件將顯示聯繫人列表中與用戶查詢對應的所有姓名和電話號碼。內容提供者拋出異常

這是我的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 2012-04-01 16:21:33

回答

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 2012-04-01 07:59:43

+0

需要完整的logcat錯誤信息,你忘記添加聯繫人權限? – idiottiger 2012-04-01 08:02:06

+0

我在清單文件中添加了這行,我無法正確保存logcat錯誤,dnt知道確切的原因.....當它保存在桌面上時,它是一個空白的日誌文件,你知道這個的原因嗎? - – WhoAmI 2012-04-01 08:15:06

0

是您NULL或空在editText.getText().toString());檢查。我認爲這是問題所在。

+0

在模擬器上測試應用程序時,我在單擊獲取記錄的按鈕之前輸入了一些值,因此在這種情況下,是否需要將空值或空值檢查爲EditText字段?我不認爲它是因爲這個原因 – WhoAmI 2012-04-01 08:09:16

+0

你可以檢查只是爲了確保,它總是一個好主意,仔細檢查。 – Mayank 2012-04-01 08:12:17

+0

是你的問題?我的壞,我想到了這一點,並對自己說,這太明顯了....好,你有它的工作。 – Mayank 2012-04-01 08:15:13