Java 安卓截击反应
我有两个类,它们将使用一个调用Volley并覆盖onResponse的类。除了两行代码外,OnResponse中的代码完全相同。基本上在响应上调用super,但仍然执行额外的两行代码的最佳方法是什么。我的意思是:Java 安卓截击反应,java,android,android-volley,listener,Java,Android,Android Volley,Listener,我有两个类,它们将使用一个调用Volley并覆盖onResponse的类。除了两行代码外,OnResponse中的代码完全相同。基本上在响应上调用super,但仍然执行额外的两行代码的最佳方法是什么。我的意思是: Class A { .... Uploader uploader = new Uploader(); uploader.startUpload(context, path, data); // I know this can't be done but sho
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
}
}
公共类上载器实现Response.Listener{
公共上载程序(){}
公共无效上载(最终上下文、字符串路径、字符串数据){
..生成请求,然后调用启动请求
}
@凌驾
公共void onResponse(字符串响应){
…为A和B类做一些共同的事情
}
}
您可以提取一个抽象类:
abstract class MyReponseListener implements Response.Listener<String> {
@Override
public void onResponse(String response) {
//the two lines of common code you want
}
}
如果您想让Uploader
的消费者有不同的行为,那么您可以提供子类作为依赖项,如下所示
重构ClassA
以获取对Uploader
的依赖:
class Uploader extends MyResponseListener {
public Uploader() { }
public void upLoad(final Context context, String path, String data) {
}
@Override
public void onResponse(String response) {
super(response);
}
}
public ClassA(Uploader uploader) {
this.uploader = uploader;
}
Uploader classAUploader = new Uploader() {
@Override
public void onResponse(String response) {
super.onResponse(response);
//your code for the special handling in ClassA
}
};
子类化上载程序:
class Uploader extends MyResponseListener {
public Uploader() { }
public void upLoad(final Context context, String path, String data) {
}
@Override
public void onResponse(String response) {
super(response);
}
}
public ClassA(Uploader uploader) {
this.uploader = uploader;
}
Uploader classAUploader = new Uploader() {
@Override
public void onResponse(String response) {
super.onResponse(response);
//your code for the special handling in ClassA
}
};
将其作为类a的依赖项传递:
ClassA classA = new ClassA(classAUploader);
更好的解决方案可能使用组合而不是继承。因此,
Uploader
有一个响应。Listener
而不是响应。Listener
。然后,不同的Response.Listener可以作为上传程序的依赖项传入,如上所述。如果你使用这种技术,你不需要仅仅为了改变响应的行为而对上传器进行子类化。Listener
上传器类中对super的调用是红色的,我做了子类化,这很有效。@JPM我很高兴它能帮上忙