Android Volly:遵循干燥原理实施方法

Android Volly:遵循干燥原理实施方法,android,android-volley,dry,Android,Android Volley,Dry,我需要使用android volly调用api来获取json数据。我在类a中实现了一个方法来调用get请求,如图所示 class A{ public static String getList(Context context,String url) { final String[] result = new String[1]; JsonArrayRequest req = new JsonArrayRequest(url, new Response.L

我需要使用android volly调用api来获取json数据。我在类a中实现了一个方法来调用get请求,如图所示

class A{
public static String getList(Context context,String url)
{
    final String[] result = new String[1];

    JsonArrayRequest req = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.e("response",response.toString());
                    result[0] =response.toString();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("responseerror",error.toString());
            result[0] =error.toString();
        }
    });

    MySingleton.getInstance(context).addToRequestQueue(req);


    return result[0];
}
}

在这里,我可以传递上下文和url来获取json数据。但问题是getList()方法甚至在从服务器获得任何响应之前就已经返回了结果。应用程序有多个需要调用get request的类。如果我在每一个这样的类中使用这个代码片段,那么它将违反DRY原则。那么,在这种情况下应该遵循什么样的正确程序呢

使用
界面
,如下所示

class A {
  private final WeakReference<ResponseListener> responseListenerWeakRef;

  public A(ResponseListener responseListener) {
    responseListenerWeakRef = new WeakReference<ResponseListener>(responseListener);
  }

  public String getList(Context context, String url) {
    JsonArrayRequest req = new JsonArrayRequest(url, 
      new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
          Log.e("response",response.toString());
          if (responseListener!=null && responseListener.get()!=null) {
            responseListener.get().onResponse(response.toString());
          }
        }
      }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
          Log.e("responseerror",error.toString());
          if (responseListener!=null && responseListener.get()!=null) {
            responseListener.get().onResponse(error.toString());
          }
        }
      }
    );
    MySingleton.getInstance(context).addToRequestQueue(req);
  }

  public interface ResponseListener {
    void onResponse(String response);
  }
}

class B implements A.ResponseListener {
  private void makeApiCall() {
    new A(this).getList(activity, url);
  }

  @Override
  public void onResponse(String response) {
    // Do something with the response.
  }
}
A类{
私人最终WeakReference responseListenerWeakRef;
公共A(负责人负责人){
responseListenerWeakRef=新的WeakReference(responseListener);
}
公共字符串getList(上下文、字符串url){
JsonArrayRequest req=新的JsonArrayRequest(url,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
Log.e(“response”,response.toString());
if(responseListener!=null&&responseListener.get()!=null){
responseListener.get().onResponse(response.toString());
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“responseerror”,error.toString());
if(responseListener!=null&&responseListener.get()!=null){
responseListener.get().onResponse(error.toString());
}
}
}
);
getInstance(上下文).addToRequestQueue(请求);
}
公共接口应答器{
void onResponse(字符串响应);
}
}
类B实现了A.ResponseListener{
私有void makeApiCall(){
新建一个(this).getList(活动,url);
}
@凌驾
公共void onResponse(字符串响应){
//对回应做点什么。
}
}
class A {
  private final WeakReference<ResponseListener> responseListenerWeakRef;

  public A(ResponseListener responseListener) {
    responseListenerWeakRef = new WeakReference<ResponseListener>(responseListener);
  }

  public String getList(Context context, String url) {
    JsonArrayRequest req = new JsonArrayRequest(url, 
      new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
          Log.e("response",response.toString());
          if (responseListener!=null && responseListener.get()!=null) {
            responseListener.get().onResponse(response.toString());
          }
        }
      }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
          Log.e("responseerror",error.toString());
          if (responseListener!=null && responseListener.get()!=null) {
            responseListener.get().onResponse(error.toString());
          }
        }
      }
    );
    MySingleton.getInstance(context).addToRequestQueue(req);
  }

  public interface ResponseListener {
    void onResponse(String response);
  }
}

class B implements A.ResponseListener {
  private void makeApiCall() {
    new A(this).getList(activity, url);
  }

  @Override
  public void onResponse(String response) {
    // Do something with the response.
  }
}