Как я могу вернуть значение из функции onResponse of Volley?

public class getString { String tag_string_req = "string_raq"; String url = "http://10.0.2.2/eat/locations/index.json"; String result=""; public String get_String() { StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { result=response; System.out.println(response); ; } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { System.out.println(volleyError.getMessage()); } }); AppController.getInstance().addToRequestQueue(strReq, tag_string_req); return result; }} 

Я хотел бы построить объект getString и вызвать get_String в других полях. Но, похоже, трудно получить результат из onResponse. Я знаю, что он не может работать таким образом. Может ли кто-нибудь помочь мне решить эту проблему?

Вы хотите использовать интерфейсы обратного вызова:

 public void getString(final VolleyCallback callback) { StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { ... // (optionally) some manipulation of the response callback.onSuccess(response); } }... }} 

Если обратный вызов определяется как

 public interface VolleyCallback{ void onSuccess(String result); } 

Пример кода внутри действия:

 public void onResume(){ super.onResume(); getString(new VolleyCallback(){ @Override public void onSuccess(String result){ ... //do stuff here } }); } 

Вы также можете сделать VolleyCallback более надежным, используя общие типы, если вы хотите выполнить обработку, или добавьте методы start() , failed(Exception e) , complete() и т. Д., Чтобы выполнить немного более мелкозернистую проверку состояния.

Имейте в виду, что это асинхронный вызов, поэтому вам придется обновлять представления и т. Д., Когда вы возвращаете результат (внутри success() ).