Java Android-如何从光标中删除项目?
假设我使用以下光标来获取某人的通话记录:Java Android-如何从光标中删除项目?,java,android,cursor,Java,Android,Cursor,假设我使用以下光标来获取某人的通话记录: String[] strFields = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME, android.provider.CallLog.Calls.CACHED_NUMBER_TYPE }; String strO
String[] strFields = {
android.provider.CallLog.Calls.NUMBER,
android.provider.CallLog.Calls.TYPE,
android.provider.CallLog.Calls.CACHED_NAME,
android.provider.CallLog.Calls.CACHED_NUMBER_TYPE
};
String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
Cursor mCallCursor = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI,
strFields,
null,
null,
strOrder
);
现在我如何删除光标中的第I项?这也可能是一个光标获取音乐列表等,所以我必须问-这是可能的吗?我可以理解某些游标不允许第三方应用从中删除
谢谢 抱歉,您无法从光标中删除
您必须使用ContentResolver或某种类型的SQL调用。您可以使用MatrixCursor执行一个技巧。使用此策略,可以复制光标,并省略要排除的一行。这对于大型游标来说显然不是很有效,因为您将整个数据集保存在内存中 您还必须在MatrixCursor的构造函数中重复列名的字符串数组。你应该保持这个不变
//TODO: put the value you want to exclude
String exclueRef = "Some id to exclude for the new";
MatrixCursor newCursor = new MatrixCursor(new String[] {"column A", "column B");
if (cursor.moveToFirst()) {
do {
// skip the copy of this one ....
if (cursor.getString(0).equals(exclueRef))
continue;
newCursor.addRow(new Object[]{cursor.getString(0), cursor.getString(1)});
} while (cursor.moveToNext());
}
我不断地与之斗争;试图让我的应用程序只使用光标和内容提供商,尽可能远离对象映射。您应该看到我的一些ViewBinder…:-) 好吧,谢谢,我会让它再打开一点,以防其他人想插话。