【问题标题】:Wrapping a Callback Function包装回调函数
【发布时间】:2017-03-22 20:15:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java android callback android-volley


    【解决方案1】:

    您可以通过向您的方法传递一个或两个接口来实现这一点,这很麻烦。 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) {....}
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2017-09-13
      相关资源
      最近更新 更多