如何从android内容提供商uri获取除片段(行号)之外的所有内容?
我想检索一个带有附加id的ContentURI,并能够去掉该id 换句话说,我有一个内容URI,例如:如何从android内容提供商uri获取除片段(行号)之外的所有内容?,android,uri,android-contentprovider,Android,Uri,Android Contentprovider,我想检索一个带有附加id的ContentURI,并能够去掉该id 换句话说,我有一个内容URI,例如: org.mycontentproviderAuthority/path1/path2/3 我想得到 org.mycontentproviderAuthority/path1/path2/ 是否可以最好使用Uri方法来实现这一点?我的意思是,我想我可以使用一个字符串标记器来删除最后一个数字,但是我假设一个uri api会更安全 我尝试了uri.getAuthority()+ur
org.mycontentproviderAuthority/path1/path2/3
我想得到
org.mycontentproviderAuthority/path1/path2/
是否可以最好使用Uri方法来实现这一点?我的意思是,我想我可以使用一个字符串标记器来删除最后一个数字,但是我假设一个uri api会更安全
我尝试了uri.getAuthority()+uri.getPath(),但这会返回整个ContentUri。下面是一个从内容uri解析ID的示例
您可以使用以下选项:
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中获取除(减去)id之外的所有内容。id将与URI.getPath()一起返回,因为id是路径的最后一部分。除了字符串操作之外,我不确定是否有任何方法可以让URI减去Id。我可能是错的,实际上我想知道是否会有一种“一个方法调用”的方法来实现它,但似乎没有。我猜它不存在的原因是,理论上,用户应该能够通过契约类复制URI(没有出现的ID)。无论如何,谢谢你的回答。
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));