美文网首页
Java的回调

Java的回调

作者: 狮_子歌歌 | 来源:发表于2016-05-20 22:21 被阅读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)。

    相关文章

      网友评论

          本文标题:Java的回调

          本文链接:https://www.haomeiwen.com/subject/pibnrttx.html