Android Uri.Builder 在方案后使用 "/"而不是 "//"

标签 android uri uribuilder

我仔细研究了源代码,但我就是找不到这种行为的原因。

根据 Use URI builder in Android or create URL with variables ,这应该绝对没问题。

假设我想连接到 https://www.gravatar.com/eac16c9fc481cb6825f8b3a35f916b5c.json

然后,我使用这段代码来打印获取该地址的三种不同方式。

String userHash = "eac16c9fc481cb6825f8b3a35f916b5c";

String correctUrl = "https://www.gravatar.com/" + userHash + ".json";
Uri.Builder builder1 = Uri.parse(correctUrl).buildUpon();

Uri.Builder builder2 = new Uri.Builder()
        .scheme("https")
        .path("www.gravatar.com")
        .appendPath(userHash + ".json");

Log.i("Correct URL", correctUrl);
Log.i("Builder 1 URL", builder1.toString());
Log.i("Builder 2 URL", builder2.toString());

前两个打印得很好,但第三个是我更喜欢使用的,但它不正确,因为你可以看到 http:/www 而不是 http://www

I/Correct URL:   https://www.gravatar.com/eac16c9fc481cb6825f8b3a35f916b5c.json
I/Builder 1 URL: https://www.gravatar.com/eac16c9fc481cb6825f8b3a35f916b5c.json
I/Builder 2 URL: https:/www.gravatar.com/eac16c9fc481cb6825f8b3a35f916b5c.json

我正在使用 API 23 进行编译,但我没有费心去尝试不同的 API 版本,因为我很困惑为什么这行不通。

最佳答案

您需要将 URL 路径设置为 authority(),而不是 path,它将始终为您提供 1 个正斜杠。删除 .path("www.gravatar.com") 添加 authority("www.gravatar.com"),

Here是为什么使用权限的更多信息。

关于Android Uri.Builder 在方案后使用 "/"而不是 "//",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36484322/

相关文章:

c# - 无效的 URI : Invalid port specified when url has more than one colon

java - 如何在 apache URIBuilder 中的端口后面添加尾部斜杠?

spring-boot - 如何在不指定方案、单独托管的情况下使用 UriBuilder 构建 URI?

android - 在 Comma Tokenizer android 中用管道符号替换逗号符号不起作用

javascript - 如何使用纯 JavaScript 解析来自 API 的 JSON?

android - 如果我使用颜色作为背景,EditText 尺寸会改变吗?

rest - 在 REST 中,当资源被分页时,应该如何处理对 findAll 操作的 GET 请求?

java - 从 URL 中提取参数

android - 从通知打开应用程序时如何应用正常 Activity 顺序

Android 启动服务永远不会启动