Android - 如果URL有#,则getHost()返回null

时间:2015-03-20 06:24:02

标签: java android uri

我有一些网址'以字符串形式,并从这些网址'我想使用java.net.URI生成URI。

这些网址'实际上是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();

但在上面的代码中,如果网址包含#+,那么getHost()将返回null。

我尝试按如下方式对网址进行编码,但它不起作用:

String encodedUrl = URLEncoder.encode(url, "UTF-8");

我也尝试将%23放到#,然后它也不起作用。

请帮我解决这个问题.....

1 个答案:

答案 0 :(得分:1)

URLEncoder并不总是提供正确的输出,尤其是在涉及URI时。

请尝试以下方法:

Uri u = Uri.parse(newURL)
                .buildUpon()
                .appendQueryParameter("param", param)
                .build();

String url = u.toString();

其中param是一个Web服务参数(如果使用any)。这将正确编码UTF-8格式的URL。然后,

final String sScheme = u.getScheme( );
final String sHost = u.getHost( );
final String sPath = u.getPath( );

它将按预期工作。

相关问题