繁体   English   中英

Android Volley抽象onResponse

[英]Android Volley abstract onResponse

我有两个类,它们将使用一个调用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
    }
}

您可以提取一个抽象类:

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的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM