关于java:从匿名内部类内部返回数据以获取包含在其中的方法

Return data from inside an anonymous inner class for method it is contained in

我有一个进行API调用的方法,该方法需要匿名内部类。在匿名内部类内部,有一个onResponse方法,该方法具有一个void返回类型,在这里我可以访问JSON。我希望该方法返回JSON。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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){
    ...
   }
 });
}


简短的回答-您需要重构您的方法,使其不具有程序性,并使用return ...

例如,

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

然后在其他类中,有一个回调充当您的"返回"

1
2
3
4
5
6
7
8
9
10
11
12
apiInstance.makeAPIRequest(new Response.Listener<JSONObject>(){

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