Android - getHost() returns null if URL #
Android - getHost() returns null if URL has #
我有一些字符串形式的 URLs',我想从这些 URLs' 使用 java.net.URI
.
生成一个 URI
这些 URL 实际上是 Android Webview
:
中的超链接
clc://C#
或 clc://C++
final URI u = new URI(newURL);
final String sScheme = u.getScheme();
final String sHost = u.getHost();
final String sPath = u.getPath();
但是在上面的代码中,如果 URL 有 #
或 +
那么 getHost()
returns null.
我尝试按如下方式对 URL 进行编码,但它不起作用:
String encodedUrl = URLEncoder.encode(url, "UTF-8");
我也试过把%23
换成#
,但是还是不行。
请帮我解决这个问题.....
URLEncoder
并不总是提供正确的输出,尤其是当涉及 URI 时。
请尝试以下方法:
Uri u = Uri.parse(newURL)
.buildUpon()
.appendQueryParameter("param", param)
.build();
String url = u.toString();
其中 param
是网络服务参数(如果使用的话)。这将正确地以 UTF-8 格式对 URL 进行编码。然后,
final String sScheme = u.getScheme( );
final String sHost = u.getHost( );
final String sPath = u.getPath( );
它将按预期工作。
我有一些字符串形式的 URLs',我想从这些 URLs' 使用 java.net.URI
.
这些 URL 实际上是 Android Webview
:
clc://C#
或 clc://C++
final URI u = new URI(newURL);
final String sScheme = u.getScheme();
final String sHost = u.getHost();
final String sPath = u.getPath();
但是在上面的代码中,如果 URL 有 #
或 +
那么 getHost()
returns null.
我尝试按如下方式对 URL 进行编码,但它不起作用:
String encodedUrl = URLEncoder.encode(url, "UTF-8");
我也试过把%23
换成#
,但是还是不行。
请帮我解决这个问题.....
URLEncoder
并不总是提供正确的输出,尤其是当涉及 URI 时。
请尝试以下方法:
Uri u = Uri.parse(newURL)
.buildUpon()
.appendQueryParameter("param", param)
.build();
String url = u.toString();
其中 param
是网络服务参数(如果使用的话)。这将正确地以 UTF-8 格式对 URL 进行编码。然后,
final String sScheme = u.getScheme( );
final String sHost = u.getHost( );
final String sPath = u.getPath( );
它将按预期工作。