2012-04-23 90 views
1

我試圖讀取用戶的聯繫人時發生崩潰,我以爲是因爲模擬器,但我想三重檢查,因爲我沒有基於android的手機。 Logcat提供了一個錯誤,它不能讀取「id」行我錯誤地命名該字符串?當閱讀聯繫人時應用程序崩潰

最後,我將如何實現一個對話框,以查看用戶是否希望應用程序讀取聯繫人?

非常感謝:) 代碼:

private void checkandImportContacts() { 
    // TODO Auto-generated method stub 
    SharedPreferences sp = getSharedPreferences(PREFS_CHECK, 0); 
    String checkfirstime = sp.getString("key3", null); 
    if(checkfirstime !=null && equals("sdhdasudafdsugdiasgdas38ey98d1diass")) { 
     finish(); 
    } else { 
     Cursor cursor = getContacts(); 
      while (cursor.moveToNext()) { 
       String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
       Toast.makeText(getApplicationContext(), displayName, Toast.LENGTH_LONG).show(); 
     } 
} 
    } 




private Cursor getContacts() { 
    Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; 
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = ‘" + ("1") + "’"; 
    String[] selectionArgs = null; 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE LOCALIZED ASC"; 
    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 

的logcat:

04-23 16:49:48.288: E/AndroidRuntime(437): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gta5news.bananaphone/com.gta5news.bananaphone.ChatService}: android.database.sqlite.SQLiteException: no such column: ‘1’: , while compiling: SELECT _id, display_name FROM view_contacts_restricted WHERE (in_visible_group = ‘1’) ORDER BY display_name COLLATE LOCALIZED ASC 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.os.Looper.loop(Looper.java:123) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-23 16:49:48.288: E/AndroidRuntime(437): at java.lang.reflect.Method.invokeNative(Native Method) 
04-23 16:49:48.288: E/AndroidRuntime(437): at java.lang.reflect.Method.invoke(Method.java:521) 
04-23 16:49:48.288: E/AndroidRuntime(437): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-23 16:49:48.288: E/AndroidRuntime(437): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-23 16:49:48.288: E/AndroidRuntime(437): at dalvik.system.NativeStart.main(Native Method) 
04-23 16:49:48.288: E/AndroidRuntime(437): Caused by: android.database.sqlite.SQLiteException: no such column: ‘1’: , while compiling: SELECT _id, display_name FROM view_contacts_restricted WHERE (in_visible_group = ‘1’) ORDER BY display_name COLLATE LOCALIZED ASC 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.content.ContentResolver.query(ContentResolver.java:245) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.Activity.managedQuery(Activity.java:1520) 
04-23 16:49:48.288: E/AndroidRuntime(437): at com.gta5news.bananaphone.ChatService.getContacts(ChatService.java:73) 
04-23 16:49:48.288: E/AndroidRuntime(437): at com.gta5news.bananaphone.ChatService.checkandImportContacts(ChatService.java:56) 
04-23 16:49:48.288: E/AndroidRuntime(437): at com.gta5news.bananaphone.ChatService.onCreate(ChatService.java:46) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-23 16:49:48.288: E/AndroidRuntime(437): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
+0

你需要什麼?名稱,號碼和其他 – 2012-04-23 16:56:13

+0

更改'''爲''' – zapl 2012-04-23 16:56:57

+0

@ Zapi我會盡力和其他答案。謝謝。 – TheBlueCat 2012-04-23 17:12:46

回答

2

您使用了錯誤的字符在查詢

Caused by: android.database.sqlite.SQLiteException: no such column: ‘1’ 

的SQLite試圖解釋‘1’爲列名稱,因爲它不是原始值。 SQLite中的值由'包圍,列名稱由"包圍或不包含任何內容。

如果該組的事情是動態做這樣的:

int group = 1; 
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = ?"; 
String[] selectionArgs = new String[] { String.valueOf(group) }; 

值會自動包裝在' &然後逃走。如果該值是靜態的,你可以簡單地做

String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = 1"; 
String[] selectionArgs = null; 
+0

聯繫人不顯示在烤麪包上?我試圖做一個日誌,但這也不起作用。 – TheBlueCat 2012-04-23 17:25:31

+0

如果你沒有得到任何錯誤,那麼你的查詢可能有其他錯誤(例如,沒有與'IN_VISIBLE_GROUP = 1'的聯繫人),或者你根本沒有聯繫。 – zapl 2012-04-23 17:47:58

+0

我不這樣做,因爲它是模擬器,我也沒有安卓手機。 – TheBlueCat 2012-04-23 17:49:57

0
private void getDetails(){ 
     Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
     String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
         ContactsContract.CommonDataKinds.Phone.NUMBER }; 
     Cursor names = getContentResolver().query(uri, projection, null, null, null); 

     int indexName = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
     int indexNumber = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
     names.moveToFirst(); 
     do { 

      String name = names.getString(indexName); 
      Log.e("Name new:", name); 
      String number = names.getString(indexNumber); 
      Log.e("Number new:","::"+number); 

     } while (names.moveToNext()); 
    } 

以上retrun所有的號碼和名字從你的聯繫人數據庫..

相關問題