2012-04-23 93 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所有的号码和名字从你的联系人数据库..

相关问题