2016-04-29 31 views
9

Próbuję wykonać następujące zapytanie w moim android app:Nieprawidłowy kolumna usunięte podczas próby kwerendy kolumnę

private static final String[] PROJECTION = 
      { 
        Data.CONTACT_ID, Data.MIMETYPE, 
        Data.DISPLAY_NAME, Phone.NUMBER, 
        Phone.TYPE, StructuredName.GIVEN_NAME, 
        StructuredName.MIDDLE_NAME, 
        StructuredName.FAMILY_NAME, 
        Data.DELETED 
      }; 


private static final String SELECTION = "(" + Data.MIMETYPE + " = ? AND " 
     + Phone.TYPE + " IN (?,?,?)) OR (" 
     + Data.MIMETYPE + " IN (?))"; 


private static final String[] SELECTION_ARGS = 
     { 
       Phone.CONTENT_ITEM_TYPE, 
       String.valueOf(Phone.TYPE_MOBILE), 
       String.valueOf(Phone.TYPE_HOME), 
       String.valueOf(Phone.TYPE_WORK), 
       StructuredName.CONTENT_ITEM_TYPE 
     }; 
final Cursor cursor = mContext.getContentResolver().query(
       Data.CONTENT_URI, PROJECTION, SELECTION, SELECTION_ARGS, Data.CONTACT_ID); 

Ale pojawia się następujący błąd:

04-29 11:00:58.715 8588 15565 E DatabaseUtils: Writing exception to parcel 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: java.lang.IllegalArgumentException: Invalid column deleted 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at android.database.sqlite.SQLiteQueryBuilder.computeProjection(SQLiteQueryBuilder.java:632) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at android.database.sqlite.SQLiteQueryBuilder.buildQuery(SQLiteQueryBuilder.java:447) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:387) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at com.android.providers.contacts.ContactsProvider2.doQuery(ContactsProvider2.java:6528) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at com.android.providers.contacts.ContactsProvider2.queryLocal(ContactsProvider2.java:6479) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at com.android.providers.contacts.ContactsProvider2.query(ContactsProvider2.java:5038) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at android.content.ContentProvider$Transport.query(ContentProvider.java:238) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112) 04-29 11:00:58.715 8588 15565 E 
DatabaseUtils: at android.os.Binder.execTransact(Binder.java:453) 

chcę wiedzieć jeśli kontakt, który czytam, zostanie usunięty, a więc nie, potrzebna jest kolumna Data.DELETED, która wydaje się być przyczyną błędu. Ale po sprawdzeniu Android documentation, DELETED wydaje się być poprawną kolumną do użycia z ContactsContract.Data.

+0

Wygląda na to, że na podstawie tej dokumentacji musisz "dołączyć" do tabeli ContactsContract.RawContacts razem z tabelą ContactsContract.Contacts, aby uzyskać dostęp do tych dodatkowych pól. – Harvtronix

+0

Z tego, co widziałem do tej pory, widzę to łączenia można wykonywać na niestandardowych tabelach. Ale ponieważ dostęp do tabeli Kontakty uzyskuje się za pomocą narzędzia do rozpoznawania zawartości, nie jestem pewien, w jaki sposób mogę dołączyć. – somesh

+0

Chociaż nie znam go osobiście, czy możesz wypróbować "surowe zapytanie" zgodnie z sugestią? http://stackoverflow.com/questions/4957009/how-do-i-join-two-sqlite-tables-in-my-android-application – Harvtronix

Odpowiedz