网络访问回调

网络访问是耗时操作,所以我们需要开启一个子线程在子线程里进行访问。但是这样有一个问题就是,当子线程已经结束这个时候访问的结果还没有返回怎么办呢?这个时候我们就需要通过回调来获得返回的值。

1、定义一个接口
2、将接口加入到网络访问的代码中,并返回访问结果

代码示例:
1、定义一个接口

public interface HttpCallbackListener {
//访问成功的回调接口
    void onFinish(String response, String response2);
//访问失败的回调接口
    void onError(Exception e);
}

2、在网络访问的代码中加入回调

public static void sendHttpRequest(final String address, final HttpCallbackListener listener) {
//开启一个子线程来进行网络访问
        new Thread(new Runnable() {
            @Override
            public void run() {
    HttpURLConnection connection = null;
    URL url;    
    try {
        if (!TextUtils.isEmpty(address)) {
            url = new URL(address);
    connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("GET");//设置访问方式
    connection.setConnectTimeout(8000);//设置连接超时时间
    connection.setReadTimeout(8000);//设置读超时时间
InputStream in = connection.getInputStream();//开始一个输入流准备从连接中读数据
BufferedReader reader = new BufferedReader(new InputStreamReader(in));//包装成一个缓冲流
        response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                            response.append(line);
                        }                       
}               
            if (listener != null) {
                // 回调onFinish()方法将结果回传
                listener.onFinish(response.toString());
            }
            } catch (Exception e) {
                    if (listener != null) {
                        // 回调onError()方法
                        listener.onError(e);//访问失败回调onError()方法
                    }
            } finally {
                    if (connection != null) {
                        connection.disconnect();//最后要关闭连接,释放资源
                    }
            }

            }
    }).start();//别忘了开启子线程
}

你可能感兴趣的:(androi网络访问)