概述

在项目开发中,有时会遇到解析Url、Uri的需求,要从中得到链接中的相应字段、参数等。有多种实现方式,在这里总结一下应用到的。

URL与URI的区别

Uri - 统一资源标志符
Url - 统一资源定位符
都是定位资源位置

  • 所属包不同
    Url是 Java提供的一个类,位于java.net.URI
    Uri是Android 提供的一个类,位于android.net.Uri
    由此可见Uri是Url的扩展,来满足Android的需要
  • 作用不同

Uri是Android开发的,扩展了Java中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;

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 pathSegments = mUri.getPathSegments();        for (String str : pathSegments) {            Log.e("zpan", "======路径拆分====path ==" + str);        }        // 获得所有参数 key        Set 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 ==httpE/zpan: ======域名+端口号+路径+参数==scheme_specific_part ===//www.zpan.com:8080/lujing/path.htm?id=10&name=zhangsan&old=24E/zpan: ======域名+端口号===authority ==www.zpan.com:8080E/zpan: ======fragment===fragment ==zuihoudeE/zpan: ======域名===host ==www.zpan.comE/zpan: ======端口号===port ==8080E/zpan: ======路径===path ==/lujing/path.htmE/zpan: ======参数===query ==id=10&name=zhangsan&old=24/////////////////////////////路径//////////////////////////////E/zpan: ======路径拆分====path ==lujingE/zpan: ======路径拆分====path ==path.htm/////////////////////////////参数//////////////////////////////E/zpan: =====params=====idE/zpan: =====params=====nameE/zpan: =====params=====oldE/zpan: ======参数===id ==10E/zpan: ======参数===name ==zhangsanE/zpan: ======参数===old ==24

补充方式

// 得到 uri 携带的参数  private void getUriParams(){      String url = "http://www.zpan.com/get/uri/params?zhang=e5e5e5&wang=54522&zhao=02201&liu=1sui";      // 转换成 uri      Uri uri = Uri.parse(url);      Log.e("zpan","=uri= " + uri);      // 得到参数字符串      String zpParams = uri.getEncodedQuery();      Log.e("zpan","=zpParams= " + zpParams);      // 拆分获得单个参数      if (!TextUtils.isEmpty(zpParams)) {          String[] params = zpParams.split("&");          for (String param : params) {              String[] key_Value = param.split("=");              if (key_Value != null && key_Value.length == 2) {                  Log.e("zpan","=key= " + key_Value[0] + " =value= " + key_Value[1]);              }          }      }  } 

打印Log日志

com.example.zpdemo E/zpan: =uri= http://www.zpan.com/get/uri/params?zhang=e5e5e5&wang=54522&zhao=02201&liu=1sui  com.example.zpdemo E/zpan: =zpParams= zhang=e5e5e5&wang=54522&zhao=02201&liu=1sui  com.example.zpdemo E/zpan: =key= zhang =value= e5e5e5  com.example.zpdemo E/zpan: =key= wang =value= 54522  com.example.zpdemo E/zpan: =key= zhao =value= 02201  com.example.zpdemo E/zpan: =key= liu =value= 1sui  

更多相关文章

  1. android的Activity之间的数据传递
  2. Android数据存储方式(二)SharedPreferences(偏好参数保存)
  3. 8.16 提炼参数对象
  4. 详解Android(安卓)中AsyncTask 的使用
  5. android PreferenceActivity结合PreferenceFragment实现参数设置
  6. Android(安卓)SQLite使用SQLiteOpenHelper类对数据库进行操作
  7. Android中OkHttp的使用
  8. 微信支付接口 For Android(安卓)上手指南
  9. 新安装Android(安卓)Studio遇到问题集合+Android(安卓)Studio整

随机推荐

  1. Android(安卓)Loader详解二:使用加载器
  2. Android(安卓)DialogFragment底部弹出菜
  3. Android下使用C++ 的NDK範例
  4. Android提高第十篇之AudioRecord实现"助
  5. Android开发环境内容汇总
  6. 【开源项目】Android(安卓)手写记事 App(
  7. Android(安卓)编译错误总结及收集
  8. 迄今最好的Http请求框架
  9. button
  10. Android中Activity,View,Window之间的关系