我正在尝试从json网址获取我附近存在的地方,但我只能在获取我的位置后获取这些地址,因为我可以选择最近的地方。 通过这种方式,我调用的方法是获取onLocationChanged中的纬度和经度。
GoogleMap mGoogleMap;
MapView mapFrag;
LocationRequest mLocationRequest;
GoogleApiClient mGoogleApiClient;
Location mLastLocation;
public void onLocationChanged(Location location)
{
mLastLocation = location;
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
loadJson(location.getLatitude(),location.getLongitude());
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));
if (mGoogleApiClient != null) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
}
}
问题在于我试图采用Json数组,使用RequestQueue和StringRequest,从未到达内部类Response.Listener的onResonse方法。 我正在这个方法中添加标记到地图。
private void loadJson(double lat, double longit){
lat = -22.950491;
longit= -43.181609;
// Store values at the time of the login attempt.
RequestQueue queue = Volley.newRequestQueue(this);
String url = "http://MyJsonURL";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
List<Places> arrayList = new ArrayList<Places>();
JSONArray jsonArray = new JSONArray(response);
for(int i = 0; i< jsonArray.length();i++){
if ((jsonArray.getJSONObject(i).optString("latitude") != "") && (jsonArray.getJSONObject(i).optString("longitude") != "")){
Places places = new Places();
places.setLatitude(jsonArray.getJSONObject(i).getDouble("latitude"));
places.setLongitude(jsonArray.getJSONObject(i).getDouble("longitude"));
places.setNome(jsonArray.getJSONObject(i).getString("nome"));
mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(places.getLatitude(),escolasMaps.getLongitude())).title(places.getNome()));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
String err = (error.getMessage()==null)?"SD Card failed":error.getMessage();
Log.e("sdcard-err2:",err);
}
});
queue.add(stringRequest);
queue.start();
}
我想要解决的另一个问题是如何在标记的标题的条目处放置一个值,所以当我点击它时,我将发送值而不是条目。
答案 0 :(得分:0)
问题发生在queue.start();,这导致一个线程中断。我不得不删除此调用并扩展超时大小以获得更多请求时间。 这解决了这个问题。