我对这个程序的目标是轮询 Google Directions API 并在 Android 应用程序的 MapView 上通过折线绘制路线。
但是,当我DirectionsResult
从 API 调用中得到回复时,尝试访问directionsResult.routes[0]
或directionsResult.geocodedWaypoints[0]
导致NullPointerException。
我目前正在使用 maven 存储库导入以下库(摘自我的 build.gradle):
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.google.http-client:google-http-client-android:1.21.0'
compile 'com.google.http-client:google-http-client-jackson:1.21.0'
compile 'com.google.http-client:google-http-client-jackson2:1.21.0'
compile 'com.google.http-client:google-http-client-gson:1.21.0'
compile 'com.google.http-client:google-http-client-protobuf:1.21.0'
compile 'com.google.http-client:google-http-client:1.21.0'
compile 'com.google.maps:google-maps-services:0.1.10'
compile 'com.google.android.gms:play-services:8.4.0'
我在带有调试调用的 AsyncTask 实现中的当前代码已注释掉:
@Override
protected synchronized String doInBackground(URL... params)
{
try {
HttpRequestFactory requestFactory = HTTP_TRANSPORT.createRequestFactory(new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) throws IOException {
request.setParser(new JsonObjectParser(JSON_FACTORY));
}
});
GenericUrl url = new GenericUrl("http://maps.googleapis.com/maps/api/directions/json");
// to and from are both LatLng's
url.put("origin", from.toUrlValue());
url.put("destination", to.toUrlValue());
url.put("sensor", true);
HttpRequest request = requestFactory.buildGetRequest(url);
//wait(1000);
HttpResponse httpResponse = request.execute();
//Log.i(TAG, httpResponse.parseAsString());
//wait(1000);
DirectionsResult directionsResult = httpResponse.parseAs(DirectionsResult.class);
//wait(1000);
//Log.i(TAG, Integer.toString(httpResponse.getStatusCode()));
//Log.i(TAG, httpResponse.getStatusMessage());
latlngs = directionsResult.routes[0].overviewPolyline.decodePath();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
我的调试过程:
显然,这是一个简短但完整的电话。使用包含折线点的腿元素(这是我假设我所追求的)。这个 JSON 与我从阅读中得到的响应相同httpResponse.parseAsString()
。
查看一些 StackExchange 问题,我看到有人建议等待接收数据。我在请求周期的所有组成部分之间延迟了 1 秒,但没有结果。
通话的其他部分都不是空的。
httpResponse.getStatusCode()
退回200。httpResponse.getStatusMessage()
返回确定。
在我尝试使用DirectionsResult
以下方法解析 JSON之前HttpResponse
,一切看起来都很正常:
DirectionsResult directionsResult = HttpResponse.parseAs(DirectionsResult.class);
之后我在访问DirectionsResult
:routes
和geocodedWaypoints
.
有人在这门课上遇到过类似的问题吗?我一直在想,如果这里没有解决,我可能会在正确的 google-http-client 库 GitHub 页面上提交问题。