Возврат данных изнутри анонимного внутреннего класса для метода, в котором они содержатся - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть метод, который делает вызов API, который требует анонимного внутреннего класса. Внутри анонимного внутреннего класса есть метод onResponse, который имеет тип возврата void, где я могу получить доступ к JSON. Я хочу, чтобы метод возвращал JSON.

public JSONObject makeAPIRequest() {

 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>(){

  @Override
  public void onResponse(JSONObject response){
   //have makeAPIRequest() return response
  }, 
  new Response.ErrorListener(){
   @Override
   public void onErrorResponse(VolleyError error){
    ...
   }
 });
}

1 Ответ

2 голосов
/ 28 апреля 2019

Краткий ответ - вам нужно провести рефакторинг вашего метода, чтобы он не был процедурным, и использовать return ...

Например,

public void makeAPIRequest(Response.Listener<JSONObject> listener) {
   JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, listener);
   // TODO: submit request
}

Затем в других классах,у вас есть обратный вызов, действующий как ваш "возврат"

apiInstance.makeAPIRequest(new Response.Listener<JSONObject>(){

  @Override
  public void onResponse(JSONObject response){
     // do stuff
  }, 
  new Response.ErrorListener(){
   @Override
   public void onErrorResponse(VolleyError error){
    ...
   }
 });
...