gpt4 book ai didi

java - ContentResolver 删除

转载 作者:行者123 更新时间:2023-11-30 00:04:05 26 4
gpt4 key购买 nike

我在尝试删除具有特定 ID 的一行数据时遇到问题,而不是通过内容提供程序删除我数据库中的所有数据。

这里是删除内容提供者的方法:

@Override
public int delete(@NonNull Uri uri, @Nullable String selection,
@Nullable String[] selectionArgs) {
switch(sUriMatcher.match(uri))
{
case CARD:
selection = (selection == null) ? "1" : selection;
break;
case CARD_WITH_ID:
long id = ContentUris.parseId(uri);
selection = String.format("%s = ?", Contract.Columns._ID);
selectionArgs = new String[]{String.valueOf(id)};
break;
default:
throw new IllegalArgumentException("Illegal delete URI");
}

SQLiteDatabase db = mCardSQLite.getWritableDatabase();
int count = db.delete(Contract.TABLE_NAME, selection, selectionArgs);

if(count > 0)
{
//Notify observers of the change
getContext().getContentResolver().notifyChange(uri, null);
}
return count;
}

我试图让 switch 语句的 CARD_WITH_ID 部分运行。我不明白为什么不是。

这是我要测试的查询

getContentResolver().delete(CardProvider.Contract.CONTENT_URI,CardProvider.Contract.Columns._ID ,null);

如何只选择一列而不是像我在上面的代码中所做的那样选择所有列?

最佳答案

是的,您提供给 .delete() 的 URI 不正确。这意味着您提供的 sUriMatcher.match(uri) 中的 uri 的内容是 CardProvider.Contract.CONTENT_URI。该 URI 不是特定 ID 的 URI,当然会匹配 CARD 部分

要使 .delete() 进入 CARD_WITH_ID,您需要这样做:

long id = 1; //id of row that you want to delete
Uri deleteUri = ContentUris.withAppendedId(CardProvider.Contract.CONTENT_URI, id);
//notice code below, not necessary to provide where and selectionArgs as CARD_WITH_ID section wil override it
getContentResolver().delete(uri, null, null);

并确保在 sUriMatcher

中注册该 URI
static {
...
sUriMatcher.addURI(YOUR_CONTENT_AUTHORITY, YOUR_PATH + "/#", CARD_WITH_ID);

关于java - ContentResolver 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49344158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com