发布谷歌地图API v2 Android的流媒体指南

发布谷歌地图API v2 Android的流媒体指南,android,google-maps,inputstream,httpurlconnection,google-directions-api,Android,Google Maps,Inputstream,Httpurlconnection,Google Directions Api,因此,我的应用程序的一部分构建了一个导航方向字符串,然后尝试解析JSON并在地图上绘制多段线路线。我首先使用位置变量或区域设置常量构建字符串。我的结局是 https://maps.googleapis.com/maps/api/directions/json?origin=Full Frame Documentary Film Festival, Durham, 27701&destination=601 W Peace St, Raleigh,27605&sensor=fal

因此,我的应用程序的一部分构建了一个导航方向字符串,然后尝试解析JSON并在地图上绘制多段线路线。我首先使用位置变量或区域设置常量构建字符串。我的结局是

https://maps.googleapis.com/maps/api/directions/json?origin=Full Frame Documentary Film 
Festival, Durham, 27701&destination=601 W Peace St, Raleigh,27605&sensor=false&key={API_KEY}
  • 没有新行(我添加它是为了可读性),而{API_KEY}是我实际的API键
我遇到的问题是,当我将URL字符串传递给这个downloadUrl(String-urlString)方法时

JSON正确地显示在我的浏览器中,我看到了谷歌在文档中描述的一切。但是在接下来的几行中,当我尝试打开到URL的连接并将JSON拉入字符串进行解析时,我得到了System.err通知

05-02 09:56:01.540: W/System.err(32232): java.io.FileNotFoundException: 
https://maps.googleapis.com/maps/api/directions/json?origin=Full Frame Documentary 
Film Festival, Durham, 27701&destination=601 W Peace St, Raleigh, 27605&sensor=false&key={API_KEY}

我想我的困惑在于,浏览器完美地显示了解析后的地址,但与同一服务器的连接(我认为是)返回了一个FNFE。我认为这是事实,这是错的吗?如果是这样的话,我的钥匙可能真的错了吗?令人困惑的是,这段代码在另一个应用程序中工作。

您必须对参数进行URL编码,例如,URL中的空格(“”)写为“+”。您的浏览器在内部执行此操作,可能没有显示提交的URL

静态字符串urlEncode(字符串值){
试一试{
返回URLEncoder.encode(值为“UTF-8”);
}捕获(不支持的编码异常e){
返回值;
}
}

但是不要对整个URL进行编码,只对参数值进行编码。如果参数名是非ASCII的,那么它们也必须进行编码,但Google API不使用此类参数。

另一件事:不确定,但似乎您将HTTP请求与UI逻辑混合在一起。涉及网络流量的IO操作不得在UI线程上执行。使用
AsyncTask
或类似的方法。@hgoebl代码有点欺骗,因为这个方法实际上是从我的AsyncTask的doInBackground()调用的,并且在一个方法中只是稍微清理代码。再次感谢您,那么您已经用了最好的方法:-),但是您可以改进一下异常处理:调用
urlConnection.getResponseCode()
,然后依赖
getInputStream()
返回响应。在
4xx
5xx
HTTP状态代码的情况下,调用getInputStream()会引发异常,您必须调用
getErrorStream()
如果您对错误响应的主体感兴趣。@hgoebl我感觉您在一天中做了一些http连接:P非常感谢一切都非常有用谢谢您这么多,老实说,我从来没有想到过,因为我认为这些类型的转换将在内部处理。如果你想避免繁琐的HttpURLConnection编程,你可以使用它。非常好,看起来值得一看
05-02 09:56:01.540: W/System.err(32232): java.io.FileNotFoundException: 
https://maps.googleapis.com/maps/api/directions/json?origin=Full Frame Documentary 
Film Festival, Durham, 27701&destination=601 W Peace St, Raleigh, 27605&sensor=false&key={API_KEY}