【问题标题】:Uri builder - why does it delete part of a string?Uri builder - 为什么它会删除字符串的一部分?
【发布时间】:2016-05-21 14:49:35
【问题描述】:

这个问题是在Android的背景下。 所以根据谷歌的文档,这就是我们应该如何向地图应用程序发送查询: https://developer.android.com/guide/components/intents-common.html#Maps

或者换句话说,给它发送一个 geo:0,0?q=my+street+address 的 URI 当我们想去我的街道地址时

但是,如果我应用此代码:

最终字符串 GEO_LOCATION="geo:0,0?";

最终字符串 QUERY_PARAM="q";

Uri builtUri = Uri.parse(GEO_LOCATION).buildUpon().appendQueryParameter(QUERY_PARAM,location).build();

builtUri 实际上不会有 0,0 例如,如果您检查它的字符串值(到字符串或调试模式), 值为 geo:?q=.... 没有 0,0。

虽然我的地图应用程序(Google 地图)在没有 0,0 的情况下也能正常工作,但如果我能理解发生了什么,我会很惊讶!为什么0,0被删除?如果我想有意发送它,我有什么方法可以保留它?

【问题讨论】:

  • 我会看看Uri.parse(GEO_LOCATION) 的样子。如果您的 0,0 在那个时候迷路了,我不会感到惊讶。
  • 我做到了,实际上它并没有丢失。所以我假设 appendQueryParameter 做到了,我不知道为什么

标签: android google-maps


【解决方案1】:

geo URI 并不真正遵循 URI 语法的完整规则。 geo URI 是“不透明的”,因为“geo:”之后的所有内容基本上都没有通常的 URI 规范(可以是他们想要的任何东西)。在 Google 的案例中,他们选择使用看起来像查询字符串的参数,但它们不是 URI 规范意义上的查询字符串。我知道,这很奇怪。

如果您想使用尽可能多的“正确”代码从不透明的地理 URI 构建 android Uri,您可以这样做:

float lat = ...
float lon = ...
String addr = URLEncoder.encode("my address", "UTF-8");
java.net.URI(
    "geo",
    "" + lat + "," + lon + "?q=" + addr,
    null);

【讨论】:

  • 嘿道格!谢谢你花时间回答,但现在我更困惑了哈哈……你指的是java的URI,它与类Uri(!)不同,我不知道为什么? google 的 Uri 在 android 的上下文中不是更好吗?另一方面,你来自谷歌!大声笑哦,伙计! Uri vs URI 的任何好的指南以及解释为什么 0,0 消失的东西?它会影响其他地图应用吗?
  • 我只是使用 java 的 URI 作为一个实用程序来构建一个可以提供给 Android 的 Uri 的字符串。 Java URI 是实现 URI 规范的通用工具。 Android 的 Uri 主要用于定位 ContentProviders 中的项目或在应用程序组件之间传递专门的数据。 (它不是通用工具)。 Uri 并没有真正完全实现互联网普遍接受的 URI 规范。
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 2012-03-31
  • 2014-12-22
  • 2017-05-11
  • 2018-12-07
相关资源
最近更新 更多