2012-11-01 22 views
1

我想檢索帶有附加標識的ContentURI,並能夠將標識刪除。如何從android內容提供商的uri中獲取除片段(行號)以外的所有內容?

換句話說,我有一個內容URI如:

org.mycontentproviderAuthority/path1/path2/3 

,我想獲得

org.mycontentproviderAuthority/path1/path2/ 

是否有可能做到這一點最好用開放的方法呢?我的意思是我想我可以使用字符串標記器來刪除最後一位數字,但是我認爲這樣做會更安全。

我試過uri.getAuthority()+ uri.getPath(),但是這讓我回到了整個ContentUri。

回答

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)); 
在我的情況
+0

我真的想知道是否會有「一種方法調用」的方式來做到這一點,但似乎沒有。我猜它不存在的原因是因爲在理論上,用戶應該能夠通過合約類再現URI(沒有被加上的ID)。無論如何感謝您的答案。 – Thomas