java - 使用 libGDX 的 HttpResponseListener 的 OO 设计
问题描述
我有很多不同的 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)}
以前没有使用过runnables,但我认为它们是要执行的自定义逻辑块。尽管有“post”前缀,但我看不到如何将 runnable 附加到侦听器执行的末尾。我正在考虑扩展 HttpResponseListener 以接受 Runnable 作为参数,然后在我得到结果时在 handleHttpResponse 中调用 Runnable 块。但是如何将结果字符串传递给可运行对象?Runnables 看不到任何参数。你是否也扩展了 runnable 来这样做?
解决方案
您创建了一个新的抽象类来实现HttpResponseListener
. 以您使用的方式实现 cancelled、handleHttpResponse 和 failed 方法,将抽象方法添加getNeeds
到您的类中。
从现在开始,使用您的新抽象类。
推荐阅读
- python - Kivy文本输入:汉字
- java - Java 使用来自不同类中调用的不同方法的 var 值
- pandas-groupby - 查找每个位置 1 月份的平均风速
- java - 启动画面不能在模拟器上工作,但在 android pie 或更高版本上工作正常,也不能在 pie 下工作
- vue.js - 使用 Vue 和 Vuetify 以编程方式设置 v-checkbox
- google-apps-script - 如何在添加新行时从谷歌表(正在收集数据作为网络挂钩)触发电子邮件?
- javascript - 使用纯js循环多个json文件
- android - 如何撤消从房间数据库中删除
- ios - 带有表格视图单元的 UIRefreshControl
- flutter - *已解决*在未来的构建器中使用存储在类中的 json 数据