2016-04-29 5 views
9

Ich versuche, die folgende Abfrage in meinem Android App auszuführen:Ungültige Spalte gelöscht werden, während eine Spalte zur Abfrage versucht

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

Aber ich erhalte den folgenden Fehler:

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) 

Ich möchte wissen, Wenn der Kontakt, den ich gerade lese, gelöscht wird oder nicht, wird die Spalte Data.DELETED für mich benötigt, und das scheint den Fehler zu verursachen. Aber wenn ich die Android documentation überprüfte, scheint DELETED eine gültige Spalte zu sein, um mit ContactsContract.Data zu verwenden.

+0

Es sieht so aus basierend auf dieser Dokumentation, dass Sie die ContactsContract.RawContacts-Tabelle zusammen mit der ContactsContract.Contacts -Tabelle "beitreten" müssen, um Zugriff auf diese zusätzlichen Felder zu erhalten. – Harvtronix

+0

Von dem, was ich bisher gesehen habe, kann ich das sehen Joins können für benutzerdefinierte Tabellen ausgeführt werden. Aber da auf die Contacts-Tabelle über Content Resolver zugegriffen wird, bin ich mir nicht sicher, wie ich einen Join machen kann. – somesh

+0

Obwohl ich nicht persönlich damit vertraut bin, können Sie eine "rohe Abfrage" versuchen, wie hier vorgeschlagen? http://stackoverflow.com/questions/4957009/how-do-i-join-two-sqlite-tables-in-my-android-application – Harvtronix

Antwort

Verwandte Themen