如何从Android内容提供商uri获取除片段(行号)以外的所有内容?

时间:2012-11-01 14:09:47

标签: android uri android-contentprovider

我想检索带有附加ID的ContentURI,并且能够删除id。

换句话说,我有一个内容URI,例如:

   org.mycontentproviderAuthority/path1/path2/3 

我想得到

   org.mycontentproviderAuthority/path1/path2/

是否可以使用Uri方法做到这一点?我的意思是我想我可以使用String tokenizer来删除最后一个数字,但是我认为这样的uri api会更安全。

我尝试了uri.getAuthority()+ uri.getPath(),但这让我回到了整个ContentUri。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以使用以下内容:

static public Uri getUriWithoutLastNPathParts(final Uri uri, final int n) {
    final List<String> segments = uri.getPathSegments();
    final String[] newSegments = new String[segments.size() - n];

    final Uri.Builder builder = new Uri.Builder();
    builder.encodedAuthority(uri.getAuthority());
    builder.encodedPath(uri.getPath());
    builder.encodedQuery(uri.getQuery());

    // no "appendPath", it messes up the thing
    for (int i = 0; i < newSegments.length; i++) {
        newSegments[i] = segments.get(i);
    }
    builder.encodedPath(TextUtils.join("/", newSegments));

    return builder.build();
}

用法:

Uri uri = Uri.parse("org.mycontentproviderAuthority/path1/path2/3");
Log.i("Segments", uri + " " + getUriWithoutLastNPathParts(uri, 1));

uri = Uri.parse("org.mycontentproviderAuthority/path1/path2/3?foo=bar");
Log.i("Segments", uri + " " + getUriWithoutLastNPathParts(uri, 2));