包装回调函数

时间:2017-03-22 20:15:08

标签: 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,但我无法确定处理错误等的有效方法。我的问题是是否有一种简单的方法可以在回调中执行重复的功能?我正在寻找一个优雅的解决方案,不一定是最简单的。

1 个答案:

答案 0 :(得分:1)

您可以通过将一个或两个接口传递给方法来实现这一点,这很麻烦。 Java 8为您带来了lambda,它使得回调更加优雅。要在Android中使用lambdas,您可以使用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) {....}

}