Java的回调

2016-05-20  本文已影响63人  狮_子歌歌

所谓回调:就是A类中调用B类中的某个方法,然后B类中反骨来调用A类中的方法D,D这个方法就叫做回调方法。

  1. class A实现了接口CallBack.
  2. class A包含一个class B的引用b.
  3. class B 有一个参数为callback的方法f(Callback callback).
  4. A的对象a调用B的方法f(Callback callback).
  5. 然后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)。

上一篇 下一篇

猜你喜欢

热点阅读