首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。
- 1.URL 比较实体 表示一个具体的
- 2.URI 比较抽象 表示一个相对的意思
- 3.Android中有一个Uri,位于android.net包下 显然是为android定制的
- 4.所属包不同
Url是 Java提供的一个类,位于java.net.URI
Uri是Android 提供的一个类,位于android.net.Uri
由此可见Uri是Url的扩展,来满足Android的需要 - 5.作用不同:Uri是Android开发的,扩展了Java中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;
URL – – 比如 http://www.baidu.com/124/123 是一个绝对的路径
URI – – 比如 /124/123 是一个相对的路径
Android Uri是一个android处理url的工具例如:
String url = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic"; Uri uri = Uri.parse(url); LogUtils.e("域名"+uri.getHost()); LogUtils.e("端口号"+uri.getPort());
打印出:域名 www.java2s.com 端口号:8080
对于一个图片描述 imageUrl还是imageUri可以视具体而定 如果图片路径是完整路径建议用imageUrl更为贴切,相对路径用imageUri,当然如果是绝对路径用imageUri也没关系,因为imageUrl是imageUri的一种情况
Uri 结构
三种划分方式:
- [scheme:]scheme-specific-part[#fragment]
- [scheme:][//authority][path][?query][#fragment]
- [scheme:][//host:port][path][?query][#fragment]
获取Uri元素
直接看代码、注释比较全,Uri各个部分都有对应的方法获取。为了方便直观的看到效果,可以对照着Log日志,总会找到你需要的。
private void button5() { String uri = "http://www.zpan.com:8080/lujing/path.htm?id=10&name=zhangsan&old=24#zuihoude"; Uri mUri = Uri.parse(uri); // 协议 String scheme = mUri.getScheme(); // 域名+端口号+路径+参数 String scheme_specific_part = mUri.getSchemeSpecificPart(); // 域名+端口号 String authority = mUri.getAuthority(); // fragment String fragment = mUri.getFragment(); // 域名 String host = mUri.getHost(); // 端口号 int port = mUri.getPort(); // 路径 String path = mUri.getPath(); // 参数 String query = mUri.getQuery(); Log.e("zpan", "======协议===scheme ==" + scheme); Log.e("zpan", "======域名+端口号+路径+参数==scheme_specific_part ===" + scheme_specific_part); Log.e("zpan", "======域名+端口号===authority ==" + authority); Log.e("zpan", "======fragment===fragment ==" + fragment); Log.e("zpan", "======域名===host ==" + host); Log.e("zpan", "======端口号===port ==" + port); Log.e("zpan", "======路径===path ==" + path); Log.e("zpan", "======参数===query ==" + query); // 依次提取出Path的各个部分的字符串,以字符串数组的形式输出 List<String> pathSegments = mUri.getPathSegments(); for (String str : pathSegments) { Log.e("zpan", "======路径拆分====path ==" + str); } // 获得所有参数 key Set<String> params = mUri.getQueryParameterNames(); for(String param: params) { Log.e("zpan","=====params=====" + param); } // 根据参数的 key,取出相应的值 String id = mUri.getQueryParameter("id"); String name = mUri.getQueryParameter("name"); String old = mUri.getQueryParameter("old"); Log.e("zpan", "======参数===id ==" + id); Log.e("zpan", "======参数===name ==" + name); Log.e("zpan", "======参数===old ==" + old); }
Log
E/zpan: ======协议===scheme ==http E/zpan: ======域名+端口号+路径+参数==scheme_specific_part ===//www.zpan.com:8080/lujing/path.htm?id=10&name=zhangsan&old=24 E/zpan: ======域名+端口号===authority ==www.zpan.com:8080 E/zpan: ======fragment===fragment ==zuihoude E/zpan: ======域名===host ==www.zpan.com E/zpan: ======端口号===port ==8080 E/zpan: ======路径===path ==/lujing/path.htm E/zpan: ======参数===query ==id=10&name=zhangsan&old=24 /////////////////////////////路径////////////////////////////// E/zpan: ======路径拆分====path ==lujing E/zpan: ======路径拆分====path ==path.htm /////////////////////////////参数////////////////////////////// E/zpan: =====params=====id E/zpan: =====params=====name E/zpan: =====params=====old E/zpan: ======参数===id ==10 E/zpan: ======参数===name ==zhangsan E/zpan: ======参数===old ==24
0