Volley和xUtils

Volley

1.Volley是对HTTP通信的再简化操作

2.Volley适合通信量不大但是特别频繁的场景

3.在android studio中要导入volley的jar包,导入方法是:
Project Structure→Dependencies→+→选择第一个→在搜索框中输入volley→选择第一个点击OK就可以了

这里写图片描述

4.Volley的逻辑图是
这里写图片描述

5.实现Volley的代码如下,并且顺带把ImageLoader也写了进去

public class VolleyActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mBtnVolley;
    private TextView mTextView;
    private Button mBtnNetImage;
    private NetworkImageView mNetworkImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley);
        mNetworkImageView= (NetworkImageView) findViewById(R.id.net_iamgeview);
        mTextView= (TextView) findViewById(R.id.textview_volley);
        mBtnVolley= (Button) findViewById(R.id.button_volley_test);
        mBtnNetImage= (Button) findViewById(R.id.button_net_image);
        mBtnVolley.setOnClickListener(this);
        mBtnNetImage.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button_volley_test:
                //四个参数,第一个是设置请求方法,第二个是url,第三个是返回鉴定并返回结果,第四个是错误返回监听
                StringRequest request=new StringRequest(Request.Method.POST, "http://192.168.0.103:8080/ElevenAugMyServer/MyServerLet", new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        mTextView.setText(response);//将返回的信息显示在TextView上
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mTextView.setText("网络连接错误");//将错误的信息返回到TextView上
                    }
                }){
                    //Post方法中才可以用,Get方法不需要用到该方法
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        HashMap<String,String> map=new HashMap<>();
                        map.put("username","Forrest");//添加提交的信息
                        return map;
                    }
                };
                //将RequestQueue单例,并将add方法也写到里面
                MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request);
                break;
            case R.id.button_net_image:
                //将单例的ImageLoader只设置一个get方法来得到ImageLoader
                mNetworkImageView.setImageUrl("http://www.daxueit.com/upload/201408/13/101047281001237.png",MySingleton.getInstance(this).getImageLoader());
                break;
            default:
                break;
        }
    }
}

单例的代码是

public class MySingleton {
    private static MySingleton mInstance;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private static Context mCtx;
    //构建一个私有的构造器
    private MySingleton(final Context context){
        mCtx=context;
        mRequestQueue = getRequestQueue();//初始化RequestQueue
        //单例ImageLoader
        mImageLoader=new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
            private final LruCache<String,Bitmap> cache=new LruCache<>(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;
    }
    //只创建一个新的RequestQueue
    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;
    }
    //重写了RequestQueue的add方法其中<T>指的泛型
    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}


xUtils

1.xUtils的http非常简单,只需要创建一个新的对象,然后调用send()方法,监听成功和失败的返回,下面是简单的DoGet方法和DoPost方法

2.可以进行注解模式的开发,这样可以节省很多的代码量,必须要调用ViewUtils.inject(this);

public class XUtilsActivity extends AppCompatActivity implements View.OnClickListener{
    //注解开发模式
    @ViewInject(R.id.button_xutils_test)//相当于找到id将id这个int值赋值给button
    private Button mBtnXutils;
    @ViewInject(R.id.button_xutils_post)
    private Button mBtnXutilsDoPost;
    @ViewInject(R.id.textview_xutils)
    private TextView mTextViewXutils;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xutils);
//        mTextViewXutils= (TextView) findViewById(R.id.textview_xutils);
        ViewUtils.inject(this);//必须要加上这一句话才可以进行注解
//        mBtnXutils= (Button) findViewById(R.id.button_xutils_test);
//        mBtnXutilsDoPost= (Button) findViewById(R.id.button_xutils_post);
//        mBtnXutils.setOnClickListener(this);
//        mBtnXutilsDoPost.setOnClickListener(this);

    }
    @OnClick({R.id.button_xutils_test,R.id.button_xutils_post})//注解开发模式需要导入xUtils包
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button_xutils_test:
                HttpDoGet();
                break;
            case R.id.button_xutils_post:
                HttpDoPost();
                break;
            default:
                break;
        }
    }

    private void HttpDoPost() {
        HttpUtils client=new HttpUtils();//创建一个新的HttpUtils对象
        RequestParams params=new RequestParams();//创建一个新的请求参数列表
        params.addBodyParameter("username","Forrest");//添加参数
        //send方法中有4个参数,第一个参数是设置提交方法,可以设置为GET和POST方法,第二个参数传入url,第三个参数传入提交的数据,第四个是返回监听
        client.send(HttpRequest.HttpMethod.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", params, new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                mTextViewXutils.setText(responseInfo.result);//将返回的结果放到TextView上
            }
            @Override
            public void onFailure(HttpException e, String s) {
                mTextViewXutils.setText("网络连接错误");
            }
        });
        return;
    }

    private void HttpDoGet() {
        HttpUtils client=new HttpUtils();//创建一个新的HttpUtils对象
        //send方法中的3个参数分别表示:第一个是设置为GET方法,第二个传入url,第三个是返回监听
        client.send(HttpRequest.HttpMethod.GET, "http://www.360.com", new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                mTextViewXutils.setText(responseInfo.result);//将放回结果放到TextView中显示
            }
            @Override
            public void onFailure(HttpException e, String s) {
                mTextViewXutils.setText("网络连接错误");
            }
        });
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值