2016-04-07 33 views
0

Telefon numarası olan kişilerin liste görünümünü döndürmek istediğim bir İmleç oluşturdum. Yani, her hücrede, kişi adına ve ardından telefon numarasına sahip olacağım.Android İmleç hatası - İmlecin doğru şekilde başlatıldığından emin olun

// 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"); 

Ve sonra bilgiyi elde etme ve her hücrede koyarak gelince: Bu kod çoğunlukla iş yapar ki, ben kod parçasını bir hata alıyorum

 while (phones.moveToNext()) { 

      String name = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

:

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) 

Yani, imleç ContactsContract.CommonDataKinds.Phone için Contacts.Contracts atlamalı ve bunu sevmez. Ama bir kullanıcının telefon numarasını nasıl alabilirim? Bildiğim kadarıyla, ContactsContracts.Contacts'da değil. CommonDataKinds'a gitmeden önce imleci veya bir şeyi yeniden başlatmalı mıyım? Bunu nasıl yaparım?

cevap

0
if (phones != null) { 
    phones.moveToFirst(); 
} 
1

phones.moveToNext() önce phone.moveToFirst() öğesini aramayı denediniz mi? İlk sıraya geçer. Bunun nedeni, geçerli sorgunuz ilk girişten önce konumlandırılmış bir İmleç nesnesini döndürmesidir. PlanetAstro

if (phones.moveToFirst()) { 

     while (phones.moveToNext()) { 
        // etc 
+0

sayesinde, ama bu sorunu çözmedi:

Sen yazma deneyebilirsiniz. Hala aynı hata. Bir tabanda ilk pozisyondan başlayarak, movetonext ve movetofirst'in aynı şeyi yine de yaptığına inanıyorum. – CHarris

İlgili konular