Ich habe zwei Volleyanfragen, die von der zweiten Anfrage an die erste Anfrage zurückgegeben werden, wo die Werte verwendet werden, um die Recyclingansicht zu machen. um den Wert zurückzugeben, den ich den Parameter als Feld gemacht habe, aber sein Wert ändert sich nicht von 0, was der Standard war.Der Wert des Parameters ändert sich nicht, wenn er von der Volley-Anforderung zurückgegeben wird
Meine erste Salve Anfrage:
private void callplcaedetails(String id) {
RequestQueue queue = Volley.newRequestQueue(this);
System.out.println("id" + id);
String url = "https://maps.googleapis.com/maps/api/place/details/json?placeid=" + id + "&key=AIzaSyDi9vrZ0F3TX***********Q";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(com.android.volley.Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
// Log.i("Response is: ", response);
JSONObject m = null;
try {
m = new JSONObject(response);
reader1 = m.getJSONObject("result");
String nameofplace = reader1.getString("name");
JSONObject geometry = reader1.getJSONObject("geometry");
JSONObject location = geometry.getJSONObject("location");
String lat = location.getString("lat");
String lng = location.getString("lng");
Log.i("lat" + lat, "lng" + lng);
Addressname = reader1.getString("formatted_address");
float x1=getdistance(lat,lng);
Log.i("disatancccccccc",x1+"");
placelist.add(new Place(nameofplace, Addressname, x1));
mAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("Not worked", "That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
Meine zweite Salve Anfrage:
private Float getdistance(String lat, String lng) {
RequestQueue queue = Volley.newRequestQueue(this);
String url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins="+latitude+","+longitude+"&destinations="+lat+","+lng+"&key=AIzaSyDi9vrZ0F3T******Y3GlQ";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(com.android.volley.Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
Log.i("Response is: ", response);
JSONObject m = null;
try {
m = new JSONObject(response);
JSONArray reader1 = m.getJSONArray("rows");
JSONObject e = reader1.getJSONObject(0);
JSONArray f = e.getJSONArray("elements");
JSONObject g =f.getJSONObject(0);
JSONObject h= g.getJSONObject("distance");
String dist = h.getString("value");
x = Float.parseFloat(dist);
Log.i("distance",x+"");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("Not worked", "That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
System.out.println("Distance Value"+x);
return x;
}
Die Log-Antwort
I/disatancccccccc: 0.0
I/lat22.9575252: lng76.04197789999999
I/System.out: dkkvnjnvfnvjnvdfjvndfvjn0.0
I/disatancccccccc: 0.0
I/Response is:: "Response works right"
I/distance: 3595.0
Entfernung kommt richtig, was ist falsch daran, und was ist der beste Weg, es zu tun.
Verwenden Sie einen Rückruf wie bei Volley. Asynchroner Code verwendet keine Rückgabeanweisungen –
Warum verwenden Sie Volley? Ich dachte, es war vor ein oder zwei Jahren ein verlassenes Projekt von Google IO. – JakeWilson801
@ JakeWilson801 Es ist auf der offiziellen Dokumentation über eine Netzwerkanforderung. Das letzte Git Commit ist jünger als ein Jahr. –