网络连接之HttpClient,Volley,xUtils

1、HttpClientDoGet

//activity中在onCreate中加MyAsyncTask类,然后再点击事件中设置,调用
 public class MainActivity extends Activity implements View.OnClickListener {
  ……
  public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button_doget:
                MyAsyncTask task = new MyAsyncTask();
                task.execute();
                break;
  ……

 class MyAsyncTask extends AsyncTask<String, Integer, String> {
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            HttpClient client = new DefaultHttpClient();
            String urlString = "http://192.168.0.30:8080/MyWebTest/MyTestServerlet?username=zhangsan";
            //直接跟在url后是doGet方法,如果想用doPost方法,改变这里的代码即可
            HttpGet get = new HttpGet(urlString);
            //设置服务器接收后的数据读取方式为utf-8
            get.setHeader("Content-Type", "application/x-www-form-urlencoded;Charset=UTF-8");
            try {
                HttpResponse response = client.execute(get);//执行get方法得到服务器的返回的所有数据都在response中
                StatusLine statusLine = response.getStatusLine();//httpClient访问服务器返回的表头
                int code = statusLine.getStatusCode();//得到状态码
                if (code == HttpURLConnection.HTTP_OK) {
                    HttpEntity entity = response.getEntity();//得到数据的实体
                    InputStream is = entity.getContent();//得到输入流
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    String line = br.readLine();
                    while (line != null) {
                        System.out.println(line);
                        line = br.readLine();
                    }
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "连接成功";
        }
    }
}

Volley

什么是Volley

在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
这是Volley名称的由来: a burst or emission of many things or a large amount at once
在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。

Volley的执行机制图:
这里写图片描述

1、连接网络

首先把requestquene设置成单例,就不用每次都新建quene

public class MySingleton {
    private static MySingleton mInstance;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private static Context mCtx;

    private MySingleton(Context context) {
        mCtx = context;
        mRequestQueue = getRequestQueue();

        mImageLoader = new ImageLoader(mRequestQueue,
                new ImageLoader.ImageCache() {
                    private final LruCache<String, Bitmap>
                            cache = new LruCache<String, Bitmap>(20);

                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }

                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url, bitmap);
                    }
                });
    }

    public static synchronized MySingleton getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new MySingleton(context);
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }

}
  case R.id.button_volley:
                StringRequest request = new StringRequest(Request.Method.GET, "http://www.360.com", new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        mTextView.setText(response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mTextView.setText("连接出错");
                    }
                });
                  MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request);

2、连接到服务器

  case R.id.button_volley:
           //     RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
                StringRequest request = new StringRequest(Request.Method.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        mTextView.setText(response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mTextView.setText("连接出错");
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        HashMap<String,String> map = new HashMap<>();
                        map.put("username","zhangsan");//得到服务器的信息
                        return  map;
                    }
                };
                MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request);
                break;

3、获得图片ImageLoader

case R.id.button_image:
                mNetworkImageView.setImageUrl("http://p0.so.qhimg.com/t01a8b52838fabe2125.jpg", MySingleton.getInstance(this).getImageLoader());//传入图片地址
                break;

这里写图片描述

xUtils

简介:
xUtils 包含了很多实用的android工具。xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响。同时需要注意的是,xUitls最低兼容android 2.2 (api level 8) 。

下面主要介绍它重要的四大组件:
一、ViewUtils

    你受够了重复冗长的findViewById了嘛?你受够了各种监听事件的绑定了嘛?在这里,你只需要一句注解,如@ViewInject、@OnClick,就能轻松摆脱小白似的代码,大大的上了一个档次。

二、HttpUtils

   支持的HTTP七种请求方式,非常便捷的满足你的接口请求的需要。同时还支持大文件上传下载,以及同步异步请求。

三、BitmapUtils

   你的程序因OOM强制关闭过嘛?你在为加在网络图片头疼嘛?有了组件,你将永久摆脱前面的问题。

四、DbUtils

   简单易用又出色的ORM框架,真的是谁用谁知道,直接轻松存储各种对象到sqlite数据库中,同时也能非常方便的进行各种条件查询,甚至分页查询,还有对表中数据的更新删除等操作,真正的实现。一行代码就可以进行增删改查。并且可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等,支持事务。

案例:

//GET方法连接网络
 HttpUtils client = new HttpUtils();//初始化
        //下面传入参数,实现 RequestCallBack的两个方法
        client.send(HttpRequest.HttpMethod.GET, "http://www.360.com", new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                mTextview.setText(responseInfo.result);
            }

            @Override
            public void onFailure(HttpException e, String s) {
                mTextview.setText("网络连接出错");
            }
        });
//POST方法
 HttpUtils client = new HttpUtils();
                RequestParams params = new RequestParams();//用RequestParams来获取参数
                params.addBodyParameter("username", "张三");
                //下面传参时记得传入params
                client.send(HttpRequest.HttpMethod.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet",params, new RequestCallBack<String>() {//ip为服务器的地址
                    @Override
                    public void onSuccess(ResponseInfo<String> responseInfo) {
                        mTextview.setText(responseInfo.result);
                    }

                    @Override
                    public void onFailure(HttpException e, String s) {
                        mTextview.setText("网络连接出错");
                    }
                });

案例展示:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值