所谓回调:就是A类中调用B类中的某个方法,然后B类中反骨来调用A类中的方法D,D这个方法就叫做回调方法。
- class A实现了接口CallBack.
- class A包含一个class B的引用b.
- class B 有一个参数为callback的方法f(Callback callback).
- A的对象a调用B的方法f(Callback callback).
- 然后b就可以在f(Callback callback)方法中调用A中的方法.
代码实现
接口CallBack
public interface HttpCallbackListener {
public void onFinish(String respone);
public void onError(Exception e);
}
class B
public class HttpUtil {
public static void sendHttpRequest(final String adress,
final HttpCallbackListener listener) {
new Thread(new Runnable() {
public void run() {
HttpURLConnection connection = null;
try {
URL = url = new URL(address);
//得到HttpURLConnection对象
connection = (HttpURLConnection) url.openConnection();
//设置HTTP请求的方式:GET(表示希望从服务器获取数据)
//或者POST(表示希望提交数据给服务器)
connection.setRequestMethod("GET");
//设置连接超时,以毫秒为单位
connection.setConnectionTimeout(8000);
//设置读取超时,以毫秒为单位
connection.setConnectionReadTimeout(8000);
//设置URLConnection对象是否允许输入,
//HttpURLConnection是URLConnection的子类
connection.setDoInput(true);
//设置URLConnection对象是否允许输出
connection.setDoOutput(true);
//获取服务器返回的输入流
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
response.append(line);
}
if(listener != null) {
listener.onFinish(response.toString());
}
}catch (Exception e) {
if(listener != null) {
listener.onError(e);
}
}finally {
if(connection != null) {
connection.disconnect();
}
}
}
}).start();
}
}
class A
public class A implements HttpCallbackListener{
private String address;
HttpUtil.sendHttpRequest(adress, this);
//回调方法
onFinish(String response) {
//do something
}
//回调方法
onError(Exception e) {
//do something
}
}
上述代码摘自《第一行代码》,其中class A实现了接口HttpCallbackListener并且有一个HttpUtil的引用。而在HttpUtil中有一个参数带HttpCallbackListener对象的静态方法。当A调用了HttpUtil对象的sendHttpRequest方法时,HttpUtil就可以调用在A实现接口HttpCallbackListener的方法(onFinish和onError)。
网友评论