Android排球摘要onResponse

时间:2017-08-17 22:06:47

标签: java android android-volley listener

我有两个类,它们将使用一个调用Volley并重写onResponse的类。除了两行之外,onReponse中的代码将完全相同。什么是基本上响应超级响应但仍执行额外两行的最佳方法。这就是我的意思:

Class A {
   ....
   Uploader uploader = new Uploader();
   uploader.startUpload(context, path, data);

   // I know this can't be done but showing what I want
   uploader.onResponse(String response) {
      super(response);
      ... 
      call to extra code
   } 
}  

B类相同但额外代码不同

public class Uploader implements Response.Listener<String> {
    public Uploader() { }

    public void upLoad(final Context context, String path, String data) {
        .... build request and then make call to start request
    }

    @Override
    public void onResponse(String response) {
        ... Doing something common for both A and B Classes
    }
}

1 个答案:

答案 0 :(得分:1)

你可以提取一个抽象类:

abstract class MyReponseListener implements Response.Listener<String> {

    @Override
    public void onResponse(String response) {
        //the two lines of common code you want 
    }
}

并让您的Uploader扩展您的摘要MyResponseListener

class Uploader extends MyResponseListener {
    public Uploader() { }

    public void upLoad(final Context context, String path, String data) {

    }

    @Override
    public void onResponse(String response) {
        super(response);
    }
}

如果您想为Uploader的使用者提供不同的行为,那么您可以将子类作为依赖关系提供,如下所示。

重构ClassA以依赖Uploader

public ClassA(Uploader uploader) {
    this.uploader = uploader;
}

子类化Uploader

Uploader classAUploader = new Uploader() { 
    @Override
    public void onResponse(String response) {
        super.onResponse(response);
        //your code for the special handling in ClassA
    }
};

将其作为ClassA的依赖项传递:

ClassA classA = new ClassA(classAUploader);

更好的解决方案可能使用合成而不是继承。因此Uploader 一个Response.Listener<String>而不是 一个Response.Listener<String>。然后可以将上述不同的Response.Listener<String>作为上传者的依赖项传入。如果您使用此技术,则不需要仅为Uploader更改Response.Listener的行为。