java - 包装回调函数

标签 java android callback android-volley

在我正在编写的 Android 应用程序中,应用程序的大部分内容涉及对特定 API 执行 Web 请求。由于数据的格式最终是相同的,我想集中执行每个请求的许多功能,而不是每次都重写它们。

例如,我每次发出网络请求时都会执行相同的错误检查例程:

JSONObject jo = new JSONObject(response);
boolean success = jo.getBoolean("success");
if(success) {
     //Do work
} else {
     //Display error
}

我的想法是使其成为某种实现 Response.Listener 的类,但我无法确定处理错误等的有效方法。我的问题是有没有一种简单的方法可以在回调中执行重复的函数?我正在寻找一个优雅的解决方案,不一定是最简单的。

最佳答案

您可以通过将一两个接口(interface)传递给您的方法来实现这一点,但这是很麻烦的。 Java 8 为您带来了 lambda,这使得回调的使用更加优雅。要在Android中使用lambda,您可以使用retrolambda:https://github.com/orfjackal/retrolambda

您的通用方法可能如下所示

parseResponse(String response,
              Consumer<JSONObject> successConsumer, 
              Consumer<String> errorConsumer) {
   JSONObject jo = new JSONObject(response);
   boolean success = jo.getBoolean("success");
   if(success) {
     successConsumer.accept(jo);
   } else {
     errorConsumer.accept("error");
   }
}

您可以像这样使用此方法:

class MyClass {
    void onResponse(String response) {
        ....
        parseResponse(response, this::handleData, this::handleError);
    }

    void handleData(JSONObject object) {....}
    void handleError(String object) {....}

}

关于java - 包装回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42961801/

相关文章:

java - 错误: cant find main class

android - 如何使用导航组件在 Android fragment 转换上收听转换完成?

javascript - 如何在回调中访问正确的“this”?

Jquery 在用户定义的函数之间等待

python - 在 Python 中使用方法 "overloading"设计回调

java - 如何使用 Struts 2 验证 HTML 标签

触发事件时的 Java 同步

java - 如何在java中获取比较器的倒数

java - 取消分配 EditText 值

android - FQL : Unexpected end of query