概述

在项目开发中,有时会遇到解析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 ==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

补充方式

// 得到 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

android中uri的作用,Android UrlUri详细解析相关推荐

  1. android中map的作用,Android Map相关总结

    HashMap.LinkedHashMap.ConcurrentHashMap.ArrayMap.SparseMap.Hashset.TreeMap的底层原理.数据结构与对比 1.HashMap 底层 ...

  2. android system.out.println,为什么“System.out.println”在Android中不起作用?

    为什么"System.out.println"在Android中不起作用? 我想在控制台中打印一些东西,这样我就可以调试它了.但出于某种原因,我的Android应用程序中没有打印任 ...

  3. not found for signing config ‘debug‘Android中meta-data的作用xmlns:tools=“http://schemas.android.com/

    目录 not found for signing config 'debug' Android中meta-data的作用 xmlns:tools="http://schemas.androi ...

  4. PHP中使用CURL之php curl详细解析和常见大坑

    这篇文章主要介绍了PHP中使用CURL之php curl详细解析和常见大坑 ,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 七夕啦,作为开发,妹子没得撩就"撩"下服务器 ...

  5. Linux内核中内存管理相关配置项的详细解析3

    接前一篇文章:Linux内核中内存管理相关配置项的详细解析2 5. 2:1 compression allocator (zbud) 对应配置变量为:CONFIG_ZBUD. 此项默认为选中(如果前一 ...

  6. Android中Uri的使用

    1.Uri 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频 ...

  7. 关于 Android 中 TabLayout 下划线适配文字长度解析(附清晰详细的源码解析)

    温故而知新 坚持原创 请多多支持 一.问题背景 假期在做项目的时候,当时遇到了一个需求就是需要使用 TabLayout + ViewPager 来实现一个上部导航栏的动态效果,并且希望下划线的长度等于 ...

  8. android 单例的作用,Android中单例模式的几个坑

    先来看这样一个单例,稍微有点经验的同学可能都会说,这样的单例是非线程安全的.要加个volatile关键字才可以.class Singleton{        private static  Sing ...

  9. android中gradle的作用,Gradle 之 Android 中的应用

    在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为 ...

最新文章

  1. 数字货币 BCH的混币神器CashShuffle
  2. net下web开发人员要掌握哪些技术才算好
  3. microsoft store打不开,提示代码是: 0x80131500,怎么解决?
  4. TIOBE 7 月编程语言榜:TypeScript 进入前 50 名
  5. MongoDB事实:商品硬件上每秒插入80000次以上
  6. go 删除 文件 某行_Go实战--用echo嵌入静态资源
  7. 3详细参数_大疆精灵3值得入手吗?最详细的实测体验,各种参数应有尽有!
  8. 【javascript】简单原型链、借用构造函数
  9. leetcode(226)—— Invert Binary Tree(Python/C++)
  10. 年轻不学习,老了回村掰苞米!快来学学这份 微服务开发实战派吧
  11. Linux启动定时任务
  12. 阿里云 OSS 之图片处理
  13. 庭院深深深几许,杨柳堆烟,帘幕无重数
  14. 5G NR 下行同步SSB(4)-- 频域配置多个SSB
  15. PCB这个工艺,免费了!
  16. 同学录管理系统(C语言)
  17. 编程范式(斯坦福大学)学习笔记《十一》
  18. 蓝桥杯题目-报纸页数/煤球数/平方怪圈/打印方格/凑算式
  19. 硅谷码农35岁危机:Java之父也找不到工作!程序员整容成风!
  20. java类级别访问修饰符作用域

热门文章

  1. 不瞎忙的人生,需要做对五件事
  2. 图片放大不清晰怎么办?​无损放大可解决
  3. 如何通过GB35114国密标准接入到LiveGBS GB28181/GB35114监控平台
  4. ESP32-PICO-D4的串口使用
  5. 手把手教你快速搭建一个代码在线编辑预览工具
  6. 人工智能期末复习4.专家系统
  7. Pyhive安装(python连接有Kerberos的hive数据库)
  8. c语言中字符串转数字函数
  9. cocos2d-x中怎么添加血量条
  10. Jlink OB仿真Cortex-M7的问题