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( );

它将按预期工作。