import static java.lang.System.out;
import static java.lang.System.err;
import java.util.logging.Level;
import java.util.logging.Logger; public class CallbackExample1 {
private interface Responser {
void onSuccess(String data);
void onFailed(String prompt);
}
private static String doSomething() {
try {
out.println("开始操作...");
Thread.sleep(5000); //模拟耗时操作(如网络请求),操作正常返回"Success","Success"表示有效的数据
return "Success";
} catch (InterruptedException ex) {
Logger.getLogger(CallbackExample1.class.getName()).log(Level.SEVERE, null, ex);
//操作出现问题返回"Failed","Failed"包含错误提示,如错误码等
return "Failed";
}
}
//使用回调函数完成操作
private static void callbackDoSomething(Responser responser) {
try {
out.println("开始操作...");
Thread.sleep(5000);
responser.onSuccess("Success");
} catch (InterruptedException ex) {
Logger.getLogger(CallbackExample1.class.getName()).log(Level.SEVERE, null, ex);
responser.onFailed("Failed");
}
}
public static void main(String[] args) {
out.println("正常模式 ------ " + doSomething());
callbackDoSomething(new Responser() {
@Override
public void onSuccess(String data) {
out.println("回调模式 ------ " + data);
} @Override
public void onFailed(String prompt) {
err.println("错误提示:" + prompt);
} });
}
}
import static java.lang.System.out;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import static java.lang.System.err;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger; public class CallbackExample2 {
private interface HttpResponser {
void onSuccess(String response);
void onError(String msg);
}
private static String httpRequest() {
try {
String urlStr = "http://api.eyekey.com/face/Check/checking?app_id=f89ae61fd63d4a63842277e9144a6bd2&app_key=af1cd33549c54b27ae24aeb041865da2&url=http://f.hiphotos.baidu.com/baike/pic/item/562c11dfa9ec8a1366377e5efe03918fa0ecc05a.jpg";
URLConnection c = new URL(urlStr).openConnection();
BufferedReader inputFromServer = new BufferedReader(new InputStreamReader(c.getInputStream()));
String line;
StringBuilder strBuf = new StringBuilder();
while ((line = inputFromServer.readLine()) != null) {
strBuf.append(line);
}
return strBuf.toString();
} catch (IOException ex) {
Logger.getLogger(CallbackExample2.class.getName()).log(Level.SEVERE, null, ex);
return ex.toString();
}
}
private static void callbackHttpRequest(HttpResponser httpResponser) {
try {
String urlStr = "http://api.eyekey.com/face/Check/checking?app_id=f89ae61fd63d4a63842277e9144a6bd2&app_key=af1cd33549c54b27ae24aeb041865da2&url=http://f.hiphotos.baidu.com/baike/pic/item/562c11dfa9ec8a1366377e5efe03918fa0ecc05a.jpg";
URLConnection c = new URL(urlStr).openConnection();
BufferedReader inputFromServer = new BufferedReader(new InputStreamReader(c.getInputStream()));
String line;
StringBuilder strBuf = new StringBuilder();
while ((line = inputFromServer.readLine()) != null) {
strBuf.append(line);
}
httpResponser.onSuccess(strBuf.toString());
} catch (IOException ex) {
Logger.getLogger(CallbackExample2.class.getName()).log(Level.SEVERE, null, ex);
httpResponser.onError(ex.toString());
}
}
public static void main(String[] args) {
out.println(httpRequest());
callbackHttpRequest(new HttpResponser() {
@Override
public void onSuccess(String response) {
err.println(response);
} @Override
public void onError(String msg) {
err.println(msg);
} });
}
}

  

  

最新文章

  1. BeanFactory vs ApplicationContext
  2. Oracle 左连接、右连接、全外连接、(+)号作用
  3. Maven工程中报 Missing artifact jdk.tools:jdk.tools:
  4. GitHub-撤销commit
  5. uvalive 3135 Argus priority_queue
  6. Unity 网络斗地主 判断牌的类型
  7. HDOJ 5093 Battle ships 二分图匹配
  8. #centos7 创建内网yum源 OpenStack源部署
  9. fineuploader使用实例
  10. 【SPOJ】Distinct Substrings/New Distinct Substrings(后缀数组)
  11. [SimplePlayer] 7. 多线程处理
  12. About me & OI这一年
  13. Nginx自动安装脚本
  14. 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结
  15. angular 表单元素的验证清除问题
  16. [c/c++] programming之路(1)、编写程序打开记事本、计算器等
  17. com.alibaba.dubbo.rpc.RpcException: Fail to start server(url: dubbo://192.16。。
  18. system.data.sqlite的源代码下载
  19. CSP201604-2:俄罗斯方块
  20. 【Android】Android之USB

热门文章

  1. BZOJ 3850: ZCC Loves Codefires【贪心】
  2. 建筑抢修 BZOJ 1029
  3. elasticsearch入门使用(五) kibana&x-pack安装使用
  4. BZOJ——1626: [Usaco2007 Dec]Building Roads 修建道路
  5. [Bzoj3205][Apio2013]机器人(斯坦纳树)(bfs)
  6. 洛谷P1865 A % B Problem
  7. SPOJ - PERMJUMP Permutation Jumping
  8. css可见性
  9. hadoop学习 的yarn
  10. Linux常用C函数-接口处理篇(网络通信函数)