封装HTTP请求

每次访问网址,需要配置网络连接的很多属性(e.i. 请求方法、连接超时时间、读取资源超时时间等),很麻烦,所以这里为了简化访问网址的过程,封装一个http请求的工具类

HttpUtil.java

需要注意的几个点

  • HTTP连接是耗时操作,不能在UI主线程中执行 要在子线程中来进行
public class HttpUtil {

    //声明一个发起HTTP请求的方法
    public static void sendRequest(final String url){

        //开启子线程执行费事操作
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //要访问的网址对象
                    URL tagetUrl = new URL(url);
                    //打开连接通道,连接到远程网址对象
                    //然后将连接通道强制转化成HTTP协议
                    HttpURLConnection httpconnection = (HttpURLConnection) tagetUrl.openConnection();
                    //访问方法GET请求
                    httpconnection.setRequestMethod("GET");
                    //连接超时的时间
                    httpconnection.setConnectTimeout(10000);
                    //读取资源超时时间
                    httpconnection.setReadTimeout(10000);
                    //获取远程访问网址的资源的输入流对象
                    InputStream in =  httpconnection.getInputStream();
                    //读取输入流数据
                    //InputStreamReader: 将二进制数据转换成字符数据
                    //BufferedReader: 将字符数据转化成文本数据
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
                    //不断的将BufferedReader对象中将数据写入字符串对象中
                    String tmpstring;
                    StringBuilder stringBuilder = new StringBuilder();
                    while ((tmpstring = bufferedReader.readLine()) != null){
                        stringBuilder.append(tmpstring);
                    }
                    Log.e("数据", stringBuilder.toString());

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        
    }
}

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //简单的访问网站
        new HttpUtil().sendRequest("http://360.net/");
    }
  • 线程内部不能使用return来返回 所以需要使用java回调
    callbackfuc.java
public interface callbackfuc {
     void onFinish(String string);
     void onError(String string);
}

``

public class HttpUtil {

    //声明一个发起HTTP请求的方法
    public static void sendRequest(final String url, final callbackfuc callbackfucer){

        //开启子线程执行费事操作
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //要访问的网址对象
                    URL tagetUrl = new URL(url);
                    //打开连接通道,连接到远程网址对象
                    //然后将连接通道强制转化成HTTP协议
                    HttpURLConnection httpconnection = (HttpURLConnection) tagetUrl.openConnection();
                    //访问方法GET请求
                    httpconnection.setRequestMethod("GET");
                    //连接超时的时间
                    httpconnection.setConnectTimeout(10000);
                    //读取资源超时时间
                    httpconnection.setReadTimeout(10000);
                    //获取远程访问网址的资源的输入流对象
                    InputStream in =  httpconnection.getInputStream();
                    //读取输入流数据
                    //InputStreamReader: 将二进制数据转换成字符数据
                    //BufferedReader: 将字符数据转化成文本数据
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
                    //不断的将BufferedReader对象中将数据写入字符串对象中
                    String tmpstring;
                    StringBuilder stringBuilder = new StringBuilder();
                    while ((tmpstring = bufferedReader.readLine()) != null){
                        stringBuilder.append(tmpstring);
                    }
                    Log.e("数据", stringBuilder.toString());
                    //是否传入这个接口对象
                    if (callbackfucer != null){
                        //将相应数据作为参数传给回调函数
                        callbackfucer.onFinish(stringBuilder.toString());
                        Log.e("ONfinish", stringBuilder.toString())
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HttpUtil.sendRequest("http://www.80la.cc/", new callbackfuc() {
            //在回调函数这里自定义处理相应数据
            @Override
            public void onFinish(String string) {
            }
            @Override
            public void onError(String string) {
            }
        });

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值