网络请求的几种方式 (HttpURLConnection,Volley,Okhttp,xutils)

首先来说说 代码较多 android自带请求方式 HttpURLConnection,Okhttp

注意:很多人会不小心加了s所以导致最后请求不下来数据 因为现在大多网址没有加密安全 所以我们就用HttpURLConnection
实现思想主要是 HttpURLConnection用IO流配合Handler 传递去实现请求

 String geturl = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
 HttpURLConnection httpURLConnection;

@SuppressLint("HandlerLeak")
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            String s = msg.obj.toString();
            Gson gson = new Gson();
            MBean mBean = gson.fromJson(s, MBean.class);
            data = mBean.getData();
            MAdapter mAdapter = new MAdapter(MainActivity.this, data);
            xv1.setAdapter(mAdapter);
            xv1.setLayoutManager(new LinearLayoutManager(MainActivity.this));
            xv1.setPullRefreshEnabled(true);
            xv1.setLoadingMoreEnabled(true);
        }
    };


 class TT extends Thread{

        int page;

        public TT(int page) {
            this.page = page;
        }

        @Override
        public void run() {
            super.run();
            try {
                Log.d("数据","进来了");
                URL url = new URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page="+page);

                httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("GET");

               if(httpURLConnection.getResponseCode() == 200){
                   Log.d("数据","进来了");
                   InputStream inputStream = httpURLConnection.getInputStream();
                   BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                   String line = null;
                   StringBuffer sb = new StringBuffer();

                   while ((line = bufferedReader.readLine())!=null){
                       sb.append(line);
                   }

                   Log.d("数据",sb.toString());
                   Message message = new Message();
                   message.obj = sb.toString();
                   handler.sendMessage(message);
               }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }

Volley

表单请求

RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);

        StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                  Log.d("数据",response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        requestQueue.add(stringRequest);
        

json请求

 class loginInter extends Thread{
        @Override
        public void run() {
            super.run();

            final String telephone = mEtAccount.getText().toString();
            final String vCode = mEtverifty.getText().toString();
            RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this);

            HashMap<String, String> params = new HashMap<String,String>();
            params.put("telephone", telephone);
            params.put("role", "2");
            params.put("vCode", vCode);


            JSONObject paramJsonObject = new JSONObject(params);

            JsonObjectRequest mJsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
                    "http://api.dev.woodlina.cn/v2/user/vclogin", paramJsonObject,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            Log.d("数据","成功了"+response);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("数据",""+error.getMessage());
                }
            }){
                //...

            };

            requestQueue.add(mJsonObjectRequest);
        }
    }

Okhttp

一.OkHttp的历史和意义
一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)
用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,现在已经打不出来)。
尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,太弱爆了。
OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。
优点:
允许连接到同一个主机地址的所有请求,提高请求效率
共享Socket,减少对服务器的请求次数
通过连接池,减少了请求延迟
缓存响应数据来减少重复的网络请求
减少了对数据流量的消耗
自动处理GZip压缩
导入依赖
implementation ‘com.squareup.okhttp3:okhttp:3.12.1’
代码

OkHttpClient okHttpClient = new OkHttpClient();
                okhttp3.Request build = new okhttp3.Request.Builder().url(geturl).build();
                Call call = okHttpClient.newCall(build);
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {

                    }

                    @Override
                    public void onResponse(Call call, okhttp3.Response response) throws IOException {
                         Log.d("数据",response.body().string());
                    }
                });

xutils

  x.http().get(new RequestParams(geturl), new org.xutils.common.Callback.CommonCallback<String>() {
                    @Override
                    public void onSuccess(String result) {
                        Log.d("数据",result);
                    }

                    @Override
                    public void onError(Throwable ex, boolean isOnCallback) {

                    }

                    @Override
                    public void onCancelled(CancelledException cex) {

                    }

                    @Override
                    public void onFinished() {

                    }
                });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值