一、概述
又是一个高大上的名字,很装X,不过整体的思想结构还是不错的。总之,就是用规则逃避规则。
接口回调很大程序上是解决子线程不能返回数据的问题。假如有两个类MainActivity、HttpUtils,一个接口CallBack,接口回调是如下流程的:
1.MainActivity中执行一个HttpUtils中的一个方法:
HttpUtils.getData(path , new Callback(){
public void onSuccess(){
//do somtehing
}
public void onFail(){
//do something
}
});
2.执行方法时,去HttpUtils中调用方法(是子线程),方法实际上通过调用MainActivity中接口CallBack对象,返回结果。
二、涉及到的程序如下:
1.主线程中:
HttpUtils.getData(path , new MyCallback());
2.被调用的方法中
new Thread(){
@Override
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
if(conn.getResponseCode() == 200){ //请求成功
InputStream is = conn.getInputStream();
String result = StreamTools.readStream(is);
System.out.println("result==="+result);
//成功之后,调用接口实现类中的成功方法
callback.onSuccess(result);
// tv_result.setText(result);
}else{ //请求失败 500 -- 404 -- 403
callback.onFaile("请求失败。。状态码之外.");
}
} catch (Exception e) {
callback.onFaile("请求失败。。出现异常.");
e.printStackTrace();
}
}
}.start();
3.接口中
/**
* 声明一个公开的接口
*/
public interface ResponseCallBack {
/**
* 成功的时候调用的方法
* @param data 返回的数据
*/
public void onSuccess(String data);
/**
* 失败之后调用的方法
* @param data
*/
public void onFaile(String data);
}