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.
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
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
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