网络请求:HttpURLConnection、HttpClient、HttpUtils、Volley

下面介绍网络请求获取json字符串的四种方法。
其中会用到的jar包
xUtils-2.6.14.jar:(http://pan.baidu.com/s/1gfHYrkR)
volley.jar:(http://pan.baidu.com/s/1boXzsi7)

具体实现上代码

package com.example.xhm.httputils;

import android.content.Context;
import android.util.Log;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONObject;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.util.Objects;

/**
 * Created by xhm on 2017/3/2.
 */
public class HttpUtil {

    private static final String TAG=HttpUtil.class.getSimpleName();
    private Context context;
    public HttpUtil(Context context){
        this.context=context;
    }
    //1.原始url
    public  void urlHttp(final String path){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("GET");
                    conn.setUseCaches(false);
                    conn.setDoOutput(false);
                    conn.setDoInput(true);
                    int responseCode = conn.getResponseCode();
                    if (responseCode == 200) {
                        InputStream is = conn.getInputStream();
                        String json = inputStream2String(is);
                        Log.e(TAG,"HttpUrlConn 获取的信息为:"+json);
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (ProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }).start();
    }
    private  String inputStream2String(InputStream is) throws IOException {
        String json;
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer = new byte[64];
        int leng = -1;

        while ((leng = bis.read(buffer)) != -1) {
            baos.write(buffer, 0, leng);
        }
        bis.close();
        is.close();
        baos.flush();
        json = new String(baos.toByteArray());
        baos.close();
        return json;
    }

    //2.httpClient
    public void HttpClientUtil(final String path){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //得到HttpClient对象
                    HttpClient getClient = new DefaultHttpClient();
                    //得到HttpGet对象
                    HttpGet request = new HttpGet(path);
                    //客户端使用GET方式执行请教,获得服务器端的回应response
                    HttpResponse response = getClient.execute(request);
                    //判断请求是否成功
                    if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
                        //获得输入流
                        InputStream  inStrem = response.getEntity().getContent();
                        String json=inputStream2String(inStrem);
                        Log.e(TAG,"HttpClient 获取的信息为:"+json);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        ).start();

    }

    //3.Xutil
    public void Xutils(String path){
        HttpUtils httpUtils=new HttpUtils();
        httpUtils.send(HttpRequest.HttpMethod.GET, path, new RequestCallBack<String>() {
            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                super.onLoading(total, current, isUploading);
                Log.e(TAG,"进行中...");
            }

            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                String json=responseInfo.result;
                Log.e(TAG,"Xutil 获取的信息为:"+json);
                Log.e(TAG,"成功...");

            }

            @Override
            public void onFailure(HttpException e, String s) {
                Log.e(TAG,"失败...");
            }
        });
    }
    //3.Volley
    public void VolleyUtil(String path){
        RequestQueue mQueue = Volley.newRequestQueue(context);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(path, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        String json= response.toString();
                       Log.e(TAG,"Volley 获取的信息为:"+json);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "err="+error.getMessage(), error);
            }
        });
        mQueue.add(jsonObjectRequest);

    }
}

最后不要忘记添加权限:

<uses-permission android:name="android.permission.INTERNET" />

若需将获取的信息传递mainThread里,可参考:http://blog.csdn.net/xinyonghuyiersan/article/details/58162693

源码下载:http://pan.baidu.com/s/1bo9IK3t

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值