Ich habe einen String auf Klassenebene deklariert.Globaler Android-Bereich String gibt null zurück
String eta;
ich vorbei eine URL auf ein Verfahren in der gleichen Klasse, die Volley Abstand zum Abrufen von einer Google-APIs verwenden. Ich weise dann die Response String meiner globalen Variable eta zu. Es hat den erforderlichen Wert innerhalb der Methode, aber der globale Wert ist null, wenn es zurückgegeben wird. Ich kann dieses Verhalten nicht verstehen. Was mache ich hier falsch?
public String getDuration(String url){
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String j = response.getString("rows");
JSONArray rowa = new JSONArray(j);
JSONObject rowobj = rowa.getJSONObject(0);
JSONArray elementsa = rowobj.getJSONArray("elements");
for (int i = 0; i < elementsa.length(); i++) {
JSONObject currentObject = elementsa.getJSONObject(i);
String duration = currentObject.getString("duration_in_traffic");
JSONObject timeObject = new JSONObject(duration);
**eta = timeObject.getString("text"); //eta has the needed value**
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(jsObjRequest);
**return eta; //here eta is null**
}
Ihr 'JsonObjectRequest' läuft asynchron, so dass die' onResponse() 'Methode wird jedoch nicht vor der' getDuration() 'Methode zurück laufen. –
@Mike M, macht es voll und ganz Sinn. Wie kann ich das umgehen? –
Gib nichts von 'getDuration()' zurück. Tun Sie stattdessen am Ende der 'onResponse()' Methode, was immer Sie mit 'eta' machen wollen. –