首页 > 解决方案 > 使用 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 来这样做?

标签: javamultithreadingooplibgdxrunnable

解决方案


您创建了一个新的抽象类来实现HttpResponseListener. 以您使用的方式实现 cancelled、handleHttpResponse 和 failed 方法,将抽象方法添加getNeeds到您的类中。

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


推荐阅读