使用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)}

以前没有使用过可运行对象,但我认为它们是要执行的自定义逻辑块。尽管有“ post”前缀,但我看不到如何将可运行对象附加到侦听器执行的末尾。我正在考虑扩展HttpResponseListener,以接受Runnable作为参数,然后在返回结果时在handleHttpResponse中的一点调用Runnable块。但是,如何将结果字符串传递给可运行对象?可运行对象看不到任何参数。您也要扩展可运行对象吗?

解决方法

您将创建一个实现HttpResponseListener的新抽象类。用您的方式实现已取消,handleHttpResponse和失败的方法,然后将抽象方法getNeeds添加到您的类中。

从现在开始,使用新的抽象类。