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

cri*_*007 3 android uri uribuilder

我挖掘了源代码,但我找不到这种行为的原因.

根据Android中的Use URI builder或使用变量创建URL,这应该绝对正常.

说我想连接到 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());
Run Code Online (Sandbox Code Playgroud)

前两个打印很好,但第三个是我更喜欢使用的,但它不正确,因为你可以看到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
Run Code Online (Sandbox Code Playgroud)

我正在使用API​​ 23进行编译,并且我没有费心去尝试不同的API版本,因为我很困惑为什么这不起作用.

Rod*_*uin 8

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

以下是更多信息使用权限的原因.