java - ContentResolver 删除

标签 java android

我在尝试删除具有特定 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/

相关文章:

java - 是否可以使用其列表项 id 而不是 android 中的列表项位置来选择自定义 ListView 项?

java - Class Not Found 异常,即使在 Mac OS X 中放入 jar 文件并设置类路径之后

java - 空的 synchronized(this){} 对线程之间的内存可见性有什么意义吗?

java - Android:执行一个方法并在超时后终止它

java - 如何在 Android Studio 中使用像 AChartEngine 这样的 Java 库?

android - 放入可绘制文件夹时图像被破坏

java - 使用 org.gwttime.time.LocalDate 覆盖 org.joda.time.LocalDate

java - Jbutton监听器没有被触发,为什么?

java - 已完成项目的百分比

c# - 是否可以在 Xamarin 表单内容页面和 Android Activity 之间导航?