2016-07-30 5 views
0

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.

+0

Verwenden Sie einen Rückruf wie bei Volley. Asynchroner Code verwendet keine Rückgabeanweisungen –

+0

Warum verwenden Sie Volley? Ich dachte, es war vor ein oder zwei Jahren ein verlassenes Projekt von Google IO. – JakeWilson801

+0

@ JakeWilson801 Es ist auf der offiziellen Dokumentation über eine Netzwerkanforderung. Das letzte Git Commit ist jünger als ein Jahr. –

Antwort

0

Hinweis:i made the parameter as final, but its value does not change from 0 which was default. erwähnen Sie in Ihrer Frage lieber, wenn ein variable final erklären, dass Sie bedeutet cant change seine Werte, nachdem sie als final erklären Sie seinen Namen endgültig verstehen kann.

Lösung:

Sie haben Variable als class level zu erklären und und dont machen es final und Ihren Wert zuweisen und dann verwenden.

public class AboutUsActivity extends Activity { 

    int x=0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

    } 

    //your response callback value 
    void XYZResponce(int result){ 
     x = result; 
     } 
} 
+0

Eine Callback-Schnittstelle wäre ein besserer Ansatz als einige "Speicher" -Klasse –

+0

Nein, nein, es ist nicht eine Speicherklasse für nur zu verstehen. –

+0

Sorry es war Feld nicht endgültig – JSONParser

Verwandte Themen