在我正在编写的 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/