[英]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.