2013-06-20 2 views
0

Je fais une application Android simple où j'ai besoin d'accéder aux contacts dans le téléphone.Impossible de lire la ligne 1, col -1 à partir de CursorWindow

Cependant mes application se bloque et que je reçois cette erreur "Impossible de lire la ligne 1, col -1 de CursorWindow"

Voici le journal:

 
06-19 11:03:59.582: E/CursorWindow(7926): Failed to read row 1, column -1 from a CursorWindow which has 2 rows, 29 columns. 
06-19 11:03:59.611: D/AndroidRuntime(7926): Shutting down VM 
06-19 11:03:59.611: W/dalvikvm(7926): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
06-19 11:03:59.842: E/AndroidRuntime(7926): FATAL EXCEPTION: main 
06-19 11:03:59.842: E/AndroidRuntime(7926): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.application/com.example.application.Search}: java.lang.IllegalStateException: Couldn't read row 1, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.os.Looper.loop(Looper.java:137) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at dalvik.system.NativeStart.main(Native Method) 
06-19 11:03:59.842: E/AndroidRuntime(7926): Caused by: java.lang.IllegalStateException: Couldn't read row 1, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.database.CursorWindow.nativeGetString(Native Method) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.database.CursorWindow.getString(CursorWindow.java:434) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.database.CursorWrapper.getString(CursorWrapper.java:114) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at com.example.application.Search.onCreate(Search.java:33) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.Activity.performCreate(Activity.java:5104) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
06-19 11:03:59.842: E/AndroidRuntime(7926):  ... 11 more 

est le code ici:

 Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, 
       null, null, null, null); 
    people.moveToFirst(); 
    while(people.moveToNext()) { 
     int name = people.getColumnIndex(PhoneLookup.DISPLAY_NAME); 
     String contact = people.getString(name); 

     int contact_no = people.getColumnIndex(PhoneLookup.NUMBER); 
     String number = people.getString(contact_no); 

    } 

    people.close(); 
+0

vous avez raté peope.moveToFirst() – Blackbelt

+0

j'avais ajouté cela aussi. mais il donne toujours le même problème donc je l'ai retiré du code pour l'instant. – drarkayl

+0

Il n'y a pas de base de données im juste essayer d'accéder aux noms et numéros de tous les contacts. – drarkayl

Répondre

0

au lieu de null passe comme projection demander la colonne dont vous avez besoin

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
String[] projection = new String[] { 
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER}; 

Cursor people = getContentResolver().query(uri, projection, null, null, null); 
+0

j'ai essayé mais je suis toujours obtenir la même erreur – drarkayl

+0

l'erreur se produit pour le NUMBER cela fonctionne bien pour le nom – drarkayl

0

Comme l'indique l'exception, le numéro de colonne n'est pas correct. Ainsi, soit la colonne PhoneLookup.DISPLAY_NAME ou PhoneLookup.NUMBER n'est pas présente dans le curseur renvoyé par la requête, en fonction de la ligne sur laquelle l'exception se produit. Vous pouvez spécifier explicitement les colonnes dont vous avez besoin à partir de DB, de sorte que vous sachiez si la requête ne lance aucune exception, alors la colonne existera sûrement.

Questions connexes