阅读(2185) (9)

鸿蒙OS Uri

2022-04-12 14:09:44 更新

Uri

java.lang.Object

|---ohos.utils.net.Uri

& public abstract class Uri
& extends Object
& implements Sequenceable, Comparable<Uri&

帮助构建和解析基于 RFC 2396 的统一资源标识符 (URI)。

标准 URI 格式如下:

[scheme:]scheme-specific-part[#fragment]

如 RFC 2396 中所述,URI 分为四种类型:分层、不透明、相对和绝对 URI。

嵌套类摘要

修饰符和类型 描述
static class Uri.Builder 快速构造统一资源标识符 (URI) 对象。
从接口 ohos.utils.Sequenceable 继承的嵌套类/接口
Sequenceable.Producer<T>

字段摘要

修饰符和类型 字段 描述
static Uri EMPTY_URI 表示一个空的 Uri 对象。
static Sequenceable.Producer<Uri> PRODUCER 指示 Uri 实例是在对 Parcel 对象进行解组后创建的。

方法总结

修饰符和类型 方法 Description
static Uri appendEncodedPathToUri(Uri orgUri, String path) 将路径附加到指定的 Uri 对象。
int compareTo(Uri other) 将此对象与指定对象进行比较以进行排序。
static String decode(String str) 使用 UTF-8 编码解码指定的字符串。
static String encode(String str) 使用 UTF-8 编码对指定的字符串进行编码。
static String encode(String str, String allow) 使用 UTF-8 编码对 allow 参数指定的字符以外的字符进行编码。
boolean equals(Object obj) 指示其他对象是否“等于”这个对象。
boolean getBooleanQueryParam(String key, boolean defaultValue) 根据指定的key获取当前URI中查询字段的第一个结果,判断结果是否为false或0。
abstract String getDecodedAuthority() 获取当前URI的解码权限字段。
abstract String getDecodedFragment() 获取当前URI的解码片段字段。
abstract String getDecodedHost() 获取当前URI的解码主机字段。
abstract String getDecodedPath() 获取当前 URI 中的解码路径字段。
abstract List<String> getDecodedPathList() 获取当前 URI 中已解码路径的列表。
abstract String getDecodedQuery() 获取当前URI中解码后的查询字段。
abstract Map<String,List<String>> getDecodedQueryParams() 获取当前 URI 的查询字段中的所有搜索条件和值。
abstract String getDecodedSchemeSpecificPart() 获取当前 URI 中已解码的 scheme-specific-part 字段。
abstract String getDecodedUserInfo() 获取当前 URI 的解码后的 user-info 字段。
abstract String getEncodedAuthority() 获取当前 URI 的编码权限字段。
abstract String getEncodedFragment() 获取当前 URI的编码片段字段。
abstract String getEncodedHost() 获取当前 URI 的编码主机字段。
abstract String getEncodedPath() 获取当前 URI的编码路径字段。
abstract String getEncodedQuery() 获取当前URI的编码查询字段。
abstract String getEncodedSchemeSpecificPart() 获取当前 URI 中编码的 scheme-specific-part 字段。
abstract String getEncodedUserInfo() 获取当前 URI 的编码后的 user-info 字段。
String getFirstQueryParamByKey(String key) 根据指定的key,获取当前URI中与查询字段匹配的第一个结果。
String getLastPath() 获取当前 URI 的最后一个路径。
Uri getLowerCaseScheme() 将当前 Uri 对象中的方案字段设置为小写。
abstract int getPort() 获取当前URI的端口字段。
Set<String> getQueryParamNames() 获取当前 URI 的查询字段中的所有名称。
List<String> getQueryParamsByKey(String key) 根据指定的key,获取当前URI中与查询字段匹配的所有结果。
String getScheme() 获取当前 URI 的 scheme 字段。
static Uri getUriFromFile(File file) 基于给定文件创建分层 Uri 对象。
static Uri getUriFromFileCanonicalPath(File file) 根据给定文件的规范路径创建分层 Uri 对象。
static Uri getUriFromParts(String scheme, String ssp, String fragment) 根据给定的字符串创建一个不透明的 Uri 对象。
boolean hasFileDescriptor() 检查此 Sequenceable 的实现类是否包含 FileDescriptor 对象数据。
int hashCode() 返回对象的哈希码值。
boolean isAbsolute() 检查当前 URI 是否为绝对 URI。
abstract boolean isHierarchical() 检查当前 URI 是否是分层的。
boolean isOpaque() 检查当前 URI 是否是不透明的。
boolean isRelative() 检查当前 URI 是否是相对的。
abstract Uri.Builder makeBuilder() 获取当前 URI 的 Builder 对象,以便您可以使用该对象添加或修改 URI 组件。
static Uri parse(String uriStr) 根据给定的符合 RFC 2396 的字符串创建 Uri 对象。
static Uri readFromParcel(Parcel in) 从 Parcel 中读取 Uri 对象。
abstract String toString() 获取编码后的URI对象的完整字符串。
boolean unmarshalling(Parcel in) 从 Parcel 对象中解组 URI 对象。
从类 java.lang.Object 继承的方法
clonefinalizegetClassnotifynotifyAllwaitwaitwait
从接口 ohos.utils.Sequenceable 继承的方法
marshalling

字段详细信息

EMPTY_URI

public static final Uri EMPTY_URI

表示一个空的 Uri 对象。 该值是一个空字符串。

PRODUCER

public static final Sequenceable.Producer<Uri> PRODUCER

指示 Uri 实例是在对 Parcel 对象进行解组后创建的。

方法详情

isHierarchical

public abstract boolean isHierarchical()

检查当前 URI 是否是分层的。 例如,http://www.mycompany.com。 分层 URI 可以是绝对的,但其特定于方案的部分字段必须以斜杠 (/) 开头。 也可以是相对的。

返回:

如果是分层 URI,则返回 true; 否则返回 false。

isOpaque

public boolean isOpaque()

检查当前 URI 是否是不透明的。 例如:www.mycompany.com。 不透明 URI 必须是绝对 URI,并且其特定于方案的部分字段不能以斜杠 (/) 开头。

返回:

如果是不透明的 URI,则返回 true; 否则返回 false。

isRelative

public boolean isRelative()

检查当前 URI 是否是相对的。 例如:www.mycompany.com。 相对 URI 不包含方案字段。

返回:

如果是相对 URI,则返回 true; 否则返回 false。

isAbsolute

public boolean isAbsolute()

检查当前 URI 是否为绝对 URI。 例如:http://www.mycompany.com。 绝对 URI 必须包含方案字段。

返回:

如果是绝对 URI,则返回 true; 否则返回 false。

getScheme

public String getScheme()

获取当前 URI 的 scheme 字段。 例如,http 是 URI http://www.mycompany.com 的方案字段。

返回:

返回方案字段; 如果当前 URI 不包含方案字段,则返回 null。

getDecodedSchemeSpecificPart

public abstract String getDecodedSchemeSpecificPart()

获取当前 URI 中已解码的 scheme-specific-part 字段。 它是方案分隔符 (:) 和片段分隔符 (#) 之间的所有内容。

例如,在 URI https://www.mycompany.com/cn/?ic_medium=direct 中,//www.mycompany.com/cn/?ic_medium=direct 是 scheme-specific-part 字段。

返回:

返回解码的方案特定部分字段; 如果当前 URI 不包含方案特定部分字段,则返回 null。

getEncodedSchemeSpecificPart

public abstract String getEncodedSchemeSpecificPart()

获取当前 URI 中编码的 scheme-specific-part 字段。

返回:

返回编码的方案特定部分字段; 如果当前 URI 不包含方案特定部分字段,则返回 null。

getDecodedAuthority

public abstract String getDecodedAuthority()

获取当前URI的解码权限字段。 分层 URI 的格式为 [scheme:][//authority][path][?query][#fragment]。 例如,www.mycompany.com 是 URI https://www.mycompany.com/cn/?ic_medium=direct 的权限字段。

返回:

返回解码的权限字段; 如果当前 URI 不包含权限字段,则返回 null。

getEncodedAuthority

public abstract String getEncodedAuthority()

获取当前 URI 的编码权限字段。

返回:

返回编码的权限字段; 如果当前 URI 不包含权限字段,则返回 null。

getDecodedUserInfo

public abstract String getDecodedUserInfo()

获取当前 URI 的解码后的 user-info 字段。

服务器类型的权限结构,格式为[user-info@]host[:port]。

例如,test 是权限结构 test@mycompany.com 的 user-info 字段。

返回:

返回解码的用户信息字段; 如果当前 URI 不包含 user-info 字段,则返回 null。

getEncodedUserInfo

public abstract String getEncodedUserInfo()

获取当前 URI 的编码后的 user-info 字段。

返回:

返回编码的用户信息字段; 如果当前 URI 不包含 user-info 字段,则返回 null。

getDecodedHost

public abstract String getDecodedHost()

获取当前URI的解码主机字段。

服务器类型的权限结构,格式为[user-info@]host[:port]。

例如,mycompany.com 是权限结构 test@mycompany.com 的主机字段。

返回:

返回解码后的主机字段; 如果当前 URI 不包含主机字段,则返回 null。

getEncodedHost

public abstract String getEncodedHost()

获取当前 URI 的编码主机字段。

返回:

返回编码的主机字段; 如果当前 URI 不包含主机字段,则返回 null。

getPort

public abstract int getPort()

获取当前URI的端口字段。

服务器类型的权限结构,格式为[user-info@]host[:port]。

例如,443 是权限结构 test@mycompany.com:443 的端口字段。

返回:

返回当前 URI 的端口字段; 如果当前 URI 不包含端口字段,则返回 -1。

getDecodedPath

public abstract String getDecodedPath()

获取当前 URI 中的解码路径字段。

返回:

返回解码后的路径字段; 如果当前 URI 不包含路径字段,则返回 null。

getEncodedPath

public abstract String getEncodedPath()

获取当前URI的编码路径字段。

返回:

返回编码的路径字段; 如果当前 URI 不包含路径字段,则返回 null。

getDecodedPathList

public abstract List<String> getDecodedPathList()

获取当前 URI 中已解码路径的列表。

一个 URI 中可能有多个路径字段,例如://authority/path1/path2/path3?query#fragment。

返回:

返回解码路径列表; 如果没有可用的路径,则返回一个空列表。

getDecodedQuery

public abstract String getDecodedQuery()

获取当前URI中解码后的查询字段。

它是查询分隔符 (?) 和片段分隔符 (#) 之间的所有内容。 例如 ic_medium=direct 是 URI https://www.mycompany.com/cn/?ic_medium=direct 的查询字段。

返回:

返回解码后的查询字段; 如果当前 URI 不包含查询字段,则返回 null。

getEncodedQuery

public abstract String getEncodedQuery()

获取当前URI的编码查询字段。

返回:

返回编码的查询字段; 如果当前 URI 不包含查询字段,则返回 null。

getDecodedQueryParams

public abstract Map<String,List<String>> getDecodedQueryParams()

获取当前 URI 的查询字段中的所有搜索条件和值。

返回:

返回所有搜索条件的映射。 该映射由搜索条件名称(称为键)和搜索条件值(称为值)组成。 映射中的值与 URI 的查询语句的顺序相同。 如果指定的键没有关联的值,则返回包含 "" 的映射。

getDecodedFragment

public abstract String getDecodedFragment()

获取当前URI的解码片段字段。

例如 28 是 URI https://www.mycompany.com/cn/?ic_medium=direct#28 的片段字段。

返回:

返回解码的片段字段; 如果当前 URI 不包含片段字段,则返回 null。

getEncodedFragment

public abstract String getEncodedFragment()

获取当前URI的编码片段字段。

返回:

返回编码的片段字段; 如果当前 URI 不包含片段字段,则返回 null。

makeBuilder

public abstract Uri.Builder makeBuilder()

获取当前 URI 的 Builder 对象,以便您可以使用该对象添加或修改 URI 组件。

返回:

返回 Builder 对象。

toString

public abstract String toString()

获取编码后的URI对象的完整字符串。 例如,https://www.mycompany.com/cn/?ic_medium=direct#28

覆盖:

类 Object 中的 toString

返回:

返回当前 URI 对象的字符串。

unmarshalling

public boolean unmarshalling(Parcel in)

从 Parcel 对象中解组 URI 对象。

目前不支持此方法。 使用 Uri#PRODUCER 进行交替。

指定者:

在接口 Sequenceable 中解组

参数:

参数名称 参数描述
in 指示 Parcel 对象。

返回:

如果解组成功,则返回 true; 否则返回 false。

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果调用此方法,则抛出此异常,因为当前不支持它。

encode

public static String encode(String str)

使用 UTF-8 编码对指定的字符串进行编码。

除了字母(A-Z 和 a-z)、数字 0-9 和非保留字符(“_-!.~'()*”)之外的所有字符都可以编码。

参数:

参数名称 参数描述
str 指示要编码的字符串

返回:

返回编码后的字符串; 如果在输入参数中传递了 null,则返回 null。

encode

public static String encode(String str, String allow)

使用 UTF-8 编码对 allow 参数指定的字符以外的字符进行编码。

字母(A-Z 和 a-z)、数字 0-9 和非保留字符(“_-!.~'()*”)不会被编码。

参数:

参数名称 参数描述
str 指示要编码的字符串
allow 表示不会被编码的附加字符集。 您可以将其设置为空。

返回:

返回编码后的字符串; 如果在输入参数中传递了 null,则返回 null。

decode

public static String decode(String str)

使用 UTF-8 编码解码指定的字符串。

参数:

参数名称 参数描述
str 指示要解码的字符串

返回:

返回解码后的字符串; 如果在输入参数中传递了 null,则返回 null。

getUriFromParts

public static Uri getUriFromParts(String scheme, String ssp, String fragment)

根据给定的字符串创建一个不透明的 Uri 对象。

参数:

参数名称 参数描述
scheme 指示不透明 URI 中的方案字段。
ssp 指示不透明 URI 中的方案特定部分字段。
fragment 表示不透明 URI 中的片段字段。

返回:

返回一个不透明的 Uri 对象。

Throws:

Throw名称 Throw描述
NullPointerException 如果方案或方案特定部分为空,则引发此异常。

getUriFromFile

public static Uri getUriFromFile(File file)

基于给定文件创建分层 Uri 对象。

URI 的格式为 file://<absolute path>。

参数:

参数名称 参数描述
file 指示用于创建 URI 的文件。

返回:

返回一个分层的 Uri 对象。

Throws:

Throw名称 Throw描述
NullPointerException 如果文件参数为空,则引发此异常。

getUriFromFileCanonicalPath

public static Uri getUriFromFileCanonicalPath(File file) throws IOException

根据给定文件的规范路径创建分层 Uri 对象。 URI 的格式为 file://<canonical path>。

参数:

参数名称 参数描述
file 指示用于创建 URI 的文件。

返回:

返回一个分层的 Uri 对象。

Throws:

Throw名称 Throw描述
IOException 如果发生 I/O 错误,则引发此异常。
NullPointerException 如果文件参数为空,则引发此异常。

appendEncodedPathToUri

public static Uri appendEncodedPathToUri(Uri orgUri, String path)

将路径附加到指定的 Uri 对象。

参数:

参数名称 参数描述
orgUri 指示要将路径附加到的 Uri 对象。
path 指示要附加的编码路径字符串。

返回:

返回附加了编码路径的 Uri 对象。

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果指定的 Uri 对象是不透明的 URI,则引发此异常。

parse

public static Uri parse(String uriStr)

根据给定的符合 RFC 2396 的字符串创建 Uri 对象。

参数:

参数名称 参数描述
uriStr 表示编码后的 URI 字符串,必须符合 RFC 2396。

返回:

返回一个 Uri 对象。

Throws:

Throw名称 Throw描述
NullPointerException 如果 uriStr 为 null 或为空,则引发此异常。
IllegalArgumentException 如果 uriStr 无效,则引发此异常。

readFromParcel

public static Uri readFromParcel(Parcel in)

从 Parcel 中读取 Uri 对象。

参数:

参数名称 参数描述
in 指示 Parcel 对象。

返回:

返回 Uri 对象。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果输入参数为 null 或解组失败,则引发此异常。

getLastPath

public String getLastPath()

获取当前 URI 的最后一个路径。

返回:

返回 URI 中解码后的最后一个路径; 如果最后一个路径不存在,则返回 null。

getQueryParamsByKey

public List<String> getQueryParamsByKey(String key)

根据指定的key,获取当前URI中与查询字段匹配的所有结果。

键可以是重复的,并且可能没有关联的值。 因此,在查询字段中的语句序列中返回匹配结果列表。 如果指定的键存在但没有关联的值,将返回一个包含“”的列表。

参数:

参数名称 参数描述
key 表示解码后的密钥

返回:

返回 URI 的查询字段中按照语句序列排序的所有匹配的解码结果; 如果没有找到结果,则返回一个空列表。

getFirstQueryParamByKey

public String getFirstQueryParamByKey(String key)

根据指定的key,获取当前URI中与查询字段匹配的第一个结果。

键可以是重复的,并且可能没有关联的值。 因此,在查询字段中的语句序列中返回第一个匹配的结果。 如果指定的键没有值,则返回""。

参数:

参数名称 参数描述
key 表示解码后的密钥

返回:

返回第一个匹配的解码结果; 如果没有找到结果,则返回 ""。

getQueryParamNames

public Set<String> getQueryParamNames()

获取当前 URI 的查询字段中的所有名称。

返回:

返回当前 URI 的解码查询字段中的所有名称; 如果没有查询字段,则返回一个空列表。

getBooleanQueryParam

public boolean getBooleanQueryParam(String key, boolean defaultValue)

根据指定的key获取当前URI中查询字段的第一个结果,判断结果是否为false或0。

参数:

参数名称 参数描述
key 表示解码后的密钥
defaultValue 如果没有找到结果,则表示返回的默认值。

返回:

如果未找到匹配项,则返回 defaultValue; 如果匹配值为 false 或 0,则返回 false; 其他情况返回 true。

getLowerCaseScheme

public Uri getLowerCaseScheme()

将当前 Uri 对象中的方案字段设置为小写。

返回:

返回带有小写方案字段的 Uri 对象。

equals

public boolean equals(Object obj)

Description copied from class: Object

指示其他对象是否“等于”这个对象。 equals 方法在非空对象引用上实现等价关系:

  • 它是reflexive:对于任何非空引用值 x,x.equals(x) 应该返回 true。
  • 它是对称的:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应该返回 true。
  • 它是传递的:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true 并且 y.equals(z) 返回 true,则 x.equals(z) 应该返回 true。
  • 它是一致的:对于任何非空引用值 x 和 y,x.equals(y) 的多次调用始终返回 true 或始终返回 false,前提是没有修改对象上 equals 比较中使用的信息。
  • 对于任何非空引用值 x,x.equals(null) 应该返回 false。

Object 类的 equals 方法实现了对象上最有区别的可能等价关系; 也就是说,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象(x == y 的值为 true)时,此方法才返回 true。

请注意,每当重写该方法时,通常都需要重写 hashCode 方法,以维护 hashCode 方法的一般约定,即相等的对象必须具有相等的哈希码。

重写:

等于 Object 中的类

参数:

参数名称 参数描述
obj 要与之比较的参考对象。

返回:

如果此对象与 obj 参数相同,则为 true; 否则为false。

hashCode

public int hashCode()

Description copied from class: Object

返回对象的哈希码值。 支持这种方法是为了有利于哈希表,例如 HashMap 提供的那些。

hashCode 的一般合约是:

  • 每当在 Java 应用程序执行期间对同一个对象多次调用它时,hashCode 方法必须始终返回相同的整数,前提是没有修改对象上的 equals 比较中使用的信息。 该整数不需要从应用程序的一次执行到同一应用程序的另一次执行保持一致。
  • 如果两个对象根据 equals(Object) 方法相等,则对两个对象中的每一个调用 hashCode 方法必须产生相同的整数结果。
  • 如果根据 Object.equals(java.lang.Object) 方法,如果两个对象不相等,则不需要对两个对象中的每一个调用 hashCode 方法必须产生不同的整数结果。 但是,程序员应该意识到,为不相等的对象生成不同的整数结果可能会提高哈希表的性能。

在合理可行的情况下,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但 Java™ 编程语言不需要这种实现技术。)

重写:

Object 类中的 hashCode

返回:

此对象的哈希码值。

compareTo

public int compareTo(Uri other)

Description copied from interface: Comparable

将此对象与指定对象进行比较以进行排序。返回负整数、零或正整数,因为此对象小于、等于或大于指定对象。 实现者必须确保所有 x 和 y 的 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。 (这意味着如果 y.compareTo(x) 抛出异常,则 x.compareTo(y) 必须抛出异常。)

实现者还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0。

最后,实现者必须确保 x.compareTo(y)==0 意味着 sgn(x.compareTo(z)) == sgn(y.compareTo(z)),对于所有 z。

强烈建议但不严格要求 (x.compareTo(y)==0) == (x.equals(y))。一般来说,任何实现了 Comparable 接口并违反此条件的类都应该清楚地表明这一事实。推荐的语言是“注意:这个类有一个与equals不一致的自然顺序。”

在前面的描述中,符号sgn(expression)表示数学符号函数,它被定义为根据表达式的值是负数、零还是正数返回-1、0或1之一。

指定者:

接口 Comparable<Uri> 中的 compareTo

参数:

参数名称 参数描述
other 要比较的对象

返回:

负整数、零或正整数,因为此对象小于、等于或大于指定对象。

hasFileDescriptor

public boolean hasFileDescriptor()

Description copied from interface: Sequenceable

检查此 Sequenceable 的实现类是否包含 FileDescriptor 对象数据。 如果自定义 Sequenceable 类包含任何 FileDescriptor 数据,则应覆盖此方法。 此方法默认返回 false。

指定者:

接口 Sequenceable 中的 hasFileDescriptor

返回:

如果它包含 FileDescriptor 数据,则返回 true; 否则返回 false。