问题描述
我要进行许多不同的http调用,并且一直在为每个构建自定义侦听器。除了在handleHttpResponse中的一个或两个方法调用外,其他所有监听器都相同。因此,以下大多数每次都会被重写:
HttpResponseListener listener = new HttpResponseListener() {
String status;
public void handleHttpResponse(HttpResponse httpResponse) {
getSession(httpResponse);
String result = httpResponse.getResultAsstring();
if (result != null) {
getNeeds(result); // <== unique part
}
System.out.println("Network Response:: Success");
}
public void Failed(Throwable t) {
status = "fail";
System.out.println("Network Response:: [Fail] " + status);
t.printstacktrace();
}
@Override
public void cancelled() {
status = "cancelled";
System.out.println("[getNeedType()] Network Response:: [Cancelled] " + status);
}
};
如何从所有这些重复的重复粘贴中整理代码?在javadoc中,它说:
将数据传递到*渲染线程应使用{@link Application#postRunnable(java.lang.Runnable runnable)}
以前没有使用过可运行对象,但我认为它们是要执行的自定义逻辑块。尽管有“ post”前缀,但我看不到如何将可运行对象附加到侦听器执行的末尾。我正在考虑扩展HttpResponseListener,以接受Runnable作为参数,然后在返回结果时在handleHttpResponse中的一点调用Runnable块。但是,如何将结果字符串传递给可运行对象?可运行对象看不到任何参数。您也要扩展可运行对象吗?
解决方法
您将创建一个实现HttpResponseListener
的新抽象类。用您的方式实现已取消,handleHttpResponse和失败的方法,然后将抽象方法getNeeds
添加到您的类中。
从现在开始,使用新的抽象类。