新线程网络请求,回调方法在主线程中进行

新建HttpUtil类
写出其中的Http请求方法sendHttpRequest,定义回调接口。

public class HttpUtil {
    public static void sendHttpRequest(final String address,final HttpCallbackListenner listener){
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                HttpURLConnection connection=null;
                try {
                    URL url=new URL(address);
                    connection=(HttpURLConnection) url.openConnection();
                    connection.setReadTimeout(8000);
                    connection.setConnectTimeout(8000);
                    connection.setRequestMethod("GET");
                    InputStream is=connection.getInputStream();
                    BufferedReader reader=new BufferedReader(new InputStreamReader(is));
                    String str;
                    StringBuilder response=new StringBuilder();
                    while((str=reader.readLine())!=null){
                        response.append(str);
                    }
                    if(listener!=null){
                        listener.onComplete(response.toString());
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    if(listener!=null)
                        listener.onError(e);
                }
                finally{
                    if(connection!=null)
                        connection.disconnect();
                }
            }
        }).start();
    }
    public interface HttpCallbackListenner{
        void onComplete(String response);
        void onError(Exception e);
    }
}

现在onComplete和onError方法是在新开线程总执行的,不能进行更新UI等一系列操作,所以需要我们新建方法requestInMainThread方法,让回调能在主线程中进行:

private Handler handler = new Handler(Looper.getMainLooper());
    public void requestInMainLooper(String address,final HttpCallbackListenner listener) {
        sendHttpRequest(address, new HttpCallbackListenner() {

            @Override
            public void onComplete(final String response) {
                handler.post(new Runnable() {

                    @Override
                    public void run() {
                        listener.onComplete(response);
                    }
                });
            }
            @Override
            public void onError(final Exception e) {
                handler.post(new Runnable() {

                    @Override
                    public void run() {
                        listener.onError(e);
                    }
                });
            }

        });
    }

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值