Ich habe einen Cursor eingerichtet, der eine Liste von Kontakten zurückgeben soll, die eine Telefonnummer haben. In jeder Zelle habe ich den Kontaktnamen und dann die Telefonnummer darunter. Dieser Code meist macht den Job:Android Cursor Fehler - Stellen Sie sicher, dass der Cursor korrekt initialisiert wird
// this query only return contacts with phone number and is not duplicated
phones = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null,
// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0)
ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1",
null,
ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
Und dann, wenn es darum geht, Informationen zu extrahieren und sie in jeder Zelle setzen:
while (phones.moveToNext()) {
String name = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Ich erhalte einen Fehler, einen Teil des Codes, der lautet:
04-07 10:43:46.489 17742-17760/com.example.chris.contactlistcustomlistview E/CursorWindow﹕ Failed to read row 0, column -1 from a CursorWindow which has 134 rows, 34 columns.
04-07 10:43:46.489 17742-17760/com.example.chris.contactlistcustomlistview W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x416168e0)
04-07 10:43:46.489 17742-17760/com.example.chris.contactlistcustomlistview E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
So wird der Cursor Contacts.Contracts
-ContactsContract.CommonDataKinds.Phone
Hopping und es mag es nicht. Aber wie kann ich sonst die Telefonnummer eines Benutzers bekommen? Soweit ich weiß, ist es nicht in ContactsContracts.Contacts
. Sollte ich den Cursor oder etwas vor dem Gehen zu CommonDataKinds
reinitialisieren und wie würde ich das tun?
dank PlanetAstro, aber das hat nicht zu beheben. Immer noch derselbe Fehler. Ich glaube, dass movetonext und movetofirst das gleiche tun, wenn man von der ersten Position in einer Tabelle ausgeht. – CHarris