内容解析器notifyChange()不起作用

狂热的

我已经设置了一个片段,以使用CursorLoader从自定义内容提供程序中提取数据。

问题是,当我使用内容解析器更新SQLite表中的记录时,光标不会刷新,即getContext().getContentResolver().notifyChange(myUri, null)没有效果。我必须退出片段,然后再次打开以查看更改。

我认为问题在于加载程序未观察到我用于更新行的URI:

  • 创建加载器的URI-content://com.myapp.provider/MyTable/Set/22
  • 用于更新行的URI-content://com.myapp.provider/MyTable/167

167标识表中的唯一行。22标识表中的一组行。有什么方法可以告诉加载器行167位于集合22中,因此应该重置游标?

这是代码,以防其更加清晰:

在Fragment中创建CursorLoader:

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle queryBundle) {
    CursorLoader cursorLoader = new CursorLoader(getActivity(), Uri.parse("content://com.myapp.provider/MyTable/Set/22"), myProjection, null, null, null);
    return cursorLoader;
}

在按钮上单击片段:

mContext.getContentResolver().update("content://com.myapp.provider/MyTable/167", values, null, null);

内容提供者类别:

private static final String AUTHORITY = "com.myapp.provider";
private static final String TABLE_PATH = "MyTable";
public static final String CONTENT_URI_BASEPATH = "content://" + AUTHORITY + "/" + TABLE_PATH;

private static final int URITYPE_TABLE = 1;
private static final int URITYPE_SINGLE_SET = 2;
private static final int URITYPE_SINGLE_ROW = 3;

private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static{
    sUriMatcher.addURI(AUTHORITY, TABLE_PATH,URITYPE_TABLE);
    sUriMatcher.addURI(AUTHORITY, TABLE_PATH + "/Set/#", URITYPE_SINGLE_SET);
    sUriMatcher.addURI(AUTHORITY, TABLE_PATH + "/#", URITYPE_SINGLE_ROW);
    }

@Override
public int update(Uri myUri, ContentValues values, String selection, String[] selectionArgs){
    int rowCount = 0;
    String id;
    SQLiteDatabase db = localDB.getWritableDatabase();
    int uriType = sUriMatcher.match(myUri);

    switch(uriType){
    case URITYPE_SINGLE_ROW :
    id = uri.getLastPathSegment();
        //selection and selectionArgs are ignored since the URI itself identifies a unique row. 
        rowCount = db.update(MyTable.TABLE_NAME, values, MyTable.COLUMN_ID + " = ?", new String[] {id});
    }

    getContext().getContentResolver().notifyChange(myUri, null);
    return rowCount;
}
狂热的

解决方案是调用notifyChange()正在观察的Uri,即集合,而不是行。

为此,我们需要进行一些更改:

  1. 调用更新时,将设置ID包括在URI中:

    mContext.getContentResolver().update("content://com.myapp.provider/MyTable/Set/22/167", values, null, null);
    
  2. 将单行的URI模式从“ /#”更改为“ / Set /#/#”

    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    static{
    sUriMatcher.addURI(AUTHORITY, TABLE_PATH,URITYPE_TABLE);
    sUriMatcher.addURI(AUTHORITY, TABLE_PATH + "/Set/#", URITYPE_SINGLE_SET);
    sUriMatcher.addURI(AUTHORITY, TABLE_PATH + "/Set/#/#", URITYPE_SINGLE_ROW);
    }
    
  3. 然后在更新功能中,构造一个必须通知的新Uri:

    List<String> pathSegments = uri.getPathSegments();
    String mySetID = pathSegments.get(2); 
    Uri mySetUri = Uri.parse("content://" + AUTHORITY + "/" + TABLE_PATH + "/Set/" + mySetID);
    getContext().getContentResolver().notifyChange(mySetUri, null);
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

内容解析器notifyChange()不起作用

来自分类Dev

xml解析器不起作用

来自分类Dev

xml解析器不起作用

来自分类Dev

@NotifyChange 不起作用

来自分类Dev

为什么此JSON解析器不起作用?

来自分类Dev

为什么我的XML解析器不起作用

来自分类Dev

Angular 8解析器不起作用:没有解析器提供程序

来自分类Dev

ContentResolver.notifyChange不起作用

来自分类Dev

用于逗号分隔列表的简单parslet解析器不起作用

来自分类Dev

HelpVerbOption不起作用-命令行解析器C#

来自分类Dev

android示例中的反向地址解析器不起作用

来自分类Dev

Dom解析器不起作用-显示的输出全部为空

来自分类Dev

Argparse的次级解析器不起作用,我无法弄清楚

来自分类Dev

C#中的antlr4解析器---似乎正确,但不起作用

来自分类Dev

蒲公英数据表I18N弹簧解析器不起作用

来自分类Dev

Dom解析器不起作用-显示的输出全部为空

来自分类Dev

将自定义选项解析器实现为行为不起作用

来自分类Dev

使用解析器从字符串到时间在Ruby上不起作用

来自分类Dev

启用 Pro Guard Jackson 解析器后不起作用

来自分类Dev

为什么我的脚本语言解析器不起作用?

来自分类Dev

Next.JS:带有承诺的解析器在SSR的api-routes-server-and-client-test中不起作用

来自分类Dev

zend framework 2 setTemplate在主机上不起作用:错误无法呈现模板...解析器无法解析为文件

来自分类Dev

解析通过内容迭代的字符串流不起作用

来自分类Dev

DNS解析在18.04服务器上不起作用

来自分类Dev

角UI路由器解析不起作用

来自分类Dev

DNS解析在18.04服务器上不起作用

来自分类Dev

解析服务器curl GET命令不起作用

来自分类Dev

Angular-UI-路由器解析不起作用

来自分类Dev

boost-spirit解析器lex-> qi:使“未记录”的on_success机制起作用

Related 相关文章

  1. 1

    内容解析器notifyChange()不起作用

  2. 2

    xml解析器不起作用

  3. 3

    xml解析器不起作用

  4. 4

    @NotifyChange 不起作用

  5. 5

    为什么此JSON解析器不起作用?

  6. 6

    为什么我的XML解析器不起作用

  7. 7

    Angular 8解析器不起作用:没有解析器提供程序

  8. 8

    ContentResolver.notifyChange不起作用

  9. 9

    用于逗号分隔列表的简单parslet解析器不起作用

  10. 10

    HelpVerbOption不起作用-命令行解析器C#

  11. 11

    android示例中的反向地址解析器不起作用

  12. 12

    Dom解析器不起作用-显示的输出全部为空

  13. 13

    Argparse的次级解析器不起作用,我无法弄清楚

  14. 14

    C#中的antlr4解析器---似乎正确,但不起作用

  15. 15

    蒲公英数据表I18N弹簧解析器不起作用

  16. 16

    Dom解析器不起作用-显示的输出全部为空

  17. 17

    将自定义选项解析器实现为行为不起作用

  18. 18

    使用解析器从字符串到时间在Ruby上不起作用

  19. 19

    启用 Pro Guard Jackson 解析器后不起作用

  20. 20

    为什么我的脚本语言解析器不起作用?

  21. 21

    Next.JS:带有承诺的解析器在SSR的api-routes-server-and-client-test中不起作用

  22. 22

    zend framework 2 setTemplate在主机上不起作用:错误无法呈现模板...解析器无法解析为文件

  23. 23

    解析通过内容迭代的字符串流不起作用

  24. 24

    DNS解析在18.04服务器上不起作用

  25. 25

    角UI路由器解析不起作用

  26. 26

    DNS解析在18.04服务器上不起作用

  27. 27

    解析服务器curl GET命令不起作用

  28. 28

    Angular-UI-路由器解析不起作用

  29. 29

    boost-spirit解析器lex-> qi:使“未记录”的on_success机制起作用

热门标签

归档