【问题标题】:Get the ID of a new record inserted into a database from the returned Uri从返回的 Uri 中获取插入数据库的新记录的 ID
【发布时间】:2018-01-09 18:13:45
【问题描述】:

当您像这样将新项目插入数据库时​​

Uri uri = getContentResolver().insert(Tournaments.CONTENT_URI, values); 

有什么方法可以从返回的 uri 中获取 id,这样我就不必运行查询来获取 id,因为它已经在返回的 uri 中?

【问题讨论】:

    标签: android android-sqlite


    【解决方案1】:

    ContentUris.parseId() 将最后一个路径段转换为长路径。

    【讨论】:

    • ContentUris.parseId() 是关于如何检索记录 ID 的“官方”Google 答案,请参阅Inserting data 部分的末尾。您也可以使用 uri.getLastPathSegment() 来获取字符串值,但您需要使用 Long.valueOf(stringId) 而不是 Integer.valueOf(stringId) 因为数据库 ID 具有长值。
    【解决方案2】:
    long id = Long.valueOf(uri.getLastPathSegment());
    

    【讨论】:

    • 是否 uri.getPathSegments().get(1) 也给出相同的结果
    【解决方案3】:

    使用 ContentUris.parseId(uri) 该语句会将最后一个路径段转换为长路径。

    阅读here中的文档

    【讨论】:

      【解决方案4】:
      long rowId = Long.valueOf(uri.getLastPathSegment());
      

      以上是正确的。但我所做的是,我传递了像 Events.CONTENT_URI.getLastPathSegment() 这样没有给出 id 的 uri。因为我们必须传递由 insert() 返回的 URI,如下所示。可能对像我这样的人有帮助!

      Uri uri = getContentResolver().insert(Events.CONTENT_URI, values); 
      long rowId = Long.valueOf(uri.getLastPathSegment());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多