在Android Q(SDK 29)上,如果你在使用ContentResolver查询数据时遇到“无效列错误”(Invalid column error),这可能是因为该列不存在或者列名被更改了。
解决方法如下:
确保你查询的表中确实存在该列。你可以通过查看数据库模式或者表结构来确认。
如果列名被更改了,你需要更新你的查询语句中的列名。确保列名的大小写和拼写与表中的列名完全匹配。
下面是一个使用ContentResolver查询数据的示例代码:
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
Uri uri = ContactsContract.Contacts.CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int idColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);
int nameColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
do {
String contactId = cursor.getString(idColumnIndex);
String contactName = cursor.getString(nameColumnIndex);
// 处理查询结果
Log.d(TAG, "Contact ID: " + contactId + ", Name: " + contactName);
} while (cursor.moveToNext());
}
if (cursor != null) {
cursor.close();
}
在这个示例中,我们查询了系统联系人的ID和显示名。你可以根据你的需求修改projection数组中的列名,并根据你的数据模型进行处理。
如果你仍然遇到“无效列错误”,请检查你的列名拼写和大小写,并确保列名在表中存在。