Uri构建器 - 为什么要删除字符串的一部分?

时间:2016-02-11 00:58:36

标签: android google-maps

这个问题是在Android的背景下进行的。 因此,根据Google的文档,我们应该如何向地图应用发送查询: https://developer.android.com/guide/components/intents-common.html#Maps

或者换句话说,发送一个地理位置的URI:0,0?q =我的+街道+地址 当我们想去我的街道地址时

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

final String GEO_LOCATION =" geo:0,0?&#34 ;;

final String QUERY_PARAM =" q&#34 ;;

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

buildUri实际上不会有0,0例如,如果你检查它的String值(到String或调试模式), 值是geo:?q = ....没有0,0。

虽然我的地图应用程序(谷歌地图)在没有0,0的情况下工作得非常好,但是对于我来说理解发生了什么将会是惊人的!为什么要删除0,0?如果我希望它有目的地发送,我有什么方法可以保留它吗?

1 个答案:

答案 0 :(得分:1)

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

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

def writes(bar: Bar) = {
    val defaultValue = BigDecimal(0)
    JsObject(Seq(
        "id" -> JsNumber(bar.id.fold(defaultValue)(BigDecimal(_))),
        "name" -> JsString(bar.name)
    ))
}