Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓截击反应_Java_Android_Android Volley_Listener - Fatal编程技术网

Java 安卓截击反应

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

我有两个类,它们将使用一个调用Volley并覆盖onResponse的类。除了两行代码外,OnResponse中的代码完全相同。基本上在响应上调用super,但仍然执行额外的两行代码的最佳方法是什么。我的意思是:

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我很高兴它能帮上忙