HttpUrl类:通用网络操作工具类

这篇博客介绍了如何使用HttpURLConnection和OkHttp两种方式发起HTTP请求。HttpURLConnection示例中,创建了子线程执行网络操作,并通过自定义的HttpCallBackListener回调处理响应。OkHttp部分则利用其内置的Callback接口进行网络访问。两者都在子线程中运行,避免UI阻塞,回调中处理结果和异常情况。
摘要由CSDN通过智能技术生成
public class HttpUtil {
    /*
    该方法使用HttpURLConnection方法访问网络
    给sendHttpRequest方法添加一个HttpCallBackListener参数,并在方法内部开启子线程在子线程中去执行具体的网络操作
     */
    public static void sendHttpRequest(String address,final HttpCallBackListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                try {
                    //获取实例,使用HttpURLConnection发出一条http请求,目标地址为传入的address
                    URL url = new URL(address);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET"); //设置HTTP请求所使用的方法
                    connection.setReadTimeout(8000);  //连接超时时间
                    connection.setConnectTimeout(8000);  //读取超时时间
                    connection.setDoInput(true);
                    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());
                    }
              //      return response.toString();
                } catch (IOException e) {
                    e.printStackTrace();
                    if (listener!=null) {
                        listener.onError(e);
                    }
          //          return e.getMessage();
                } finally {
                    if (connection != null) {
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }
    /*
    使用OkHttp访问网络
    该方法中有一个Callback参数,这是okhttp自带的回调接口,类似于上面自己编写的HttpCallBackListener
     */
    public static void sendOkHttpRequest(String address,okhttp3.Callback callback){
        //获取OkHttp的实例
        OkHttpClient client=new OkHttpClient();
        //创建Requset对象来发送Http请求
        Request request=new Request.Builder()
                .url(address)  //通过url来设置目标地址
                .build();
        //使用OkHttpClient的newCall方法来发送请求,并调用execute方法来读取数据
        client.newCall(request).enqueue(callback);
    }
}

需要注意,以下回调接口还是在子线程中运行的,所以不可以在里面执行ui操作,除非借助runOnUIThread()来进行线程转换。

每当发起一条HTTP请求的时候就可以这样写:

//(1):
        String address="http://www.baidu.com";
        HttpUtil.sendHttpRequest(address, new HttpCallBackListener() {
            @Override
            public void onFinish(String response) {
                //在这里根据返回的内容执行具体的逻辑
            }
            @Override
            public void onError(Exception e) {
                //在这里对异常情况进行处理
            }
        });

//(2):
        String address="http://www.baidu.com";
        HttpUtil.sendOkHttpRequest(address, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //在这里对异常情况进行处理
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //得到服务器的具体内容
                String responseData=response.body().string();
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值