在项目中添加google maps api之后的几天里,我一直面临这个问题。我已完成所有工作,启用了免费试用计费,并且还进行了许多有关代码的更改,但我一无所获,此后,我添加了google place api,但结果是搜索栏突然消失了。
在此代码中显示错误:
private void drawRoute(final LatLng yourLocation, String address) {
mService.getGeoCode(address).enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
try{
JSONObject jsonObject=new JSONObject(response.body().toString());
String lat= ((JSONArray)jsonObject.get("results"))
.getJSONObject(0)
.getJSONObject("geometry")
.getJSONObject("location")
.get("lat").toString();
String lng= ((JSONArray)jsonObject.get("results"))
.getJSONObject(0)
.getJSONObject("geometry")
.getJSONObject("location")
.get("lng").toString();
LatLng orderLocation=new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.locationmarker);
bitmap=Common.scaleBitmap(bitmap,70,70);
MarkerOptions marker=new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))
.title("Order of "+Common.currentRequest.getPhone())
.position(orderLocation);
mMap.addMarker(marker);
//draw route
mService.getDirections(yourLocation.latitude+","+yourLocation.longitude,
orderLocation.latitude+","+orderLocation.longitude)
.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
new ParserTask().execute(response.body().toString());
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
}
答案 0 :(得分:0)
我猜这个地方发生了错误:
((JSONArray)jsonObject.get("results"))
.getJSONObject(0)
您必须考虑results
属性仅包含一个空数组的情况。为此,您可以将results
数组分配给变量,测试其长度,并检查其是否为0
,例如立即返回(不执行任何操作)或向用户显示消息。
JSONArray results = (JSONArray)jsonObject.get("results");
if (results.length() == 0) {
// handle this case, for example
return;
}
// There is at least one result
String lat= results
.getJSONObject(0)
.getJSONObject("geometry")
...