您的位置:首页 > 其它

volley的正确使用方式

2015-09-14 19:34 435 查看
源码下载:https://github.com/heinika/android-volley

导入的三种方式:
在dependencies下搜索

导入源码包,import model 在dependencies导入model
导入jar,放在lib目录下

networkimageview防止内存溢出
先下载,判断内存,不够就压缩图片



volley实现方式(如上图):
先找缓存
后访问网络
使用起来非常简单:
先写一个单例,保证只有一个RequestQueue

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_connect:
                /**
                 * 应该创建单例防止出现多个RequestQueue
                 */
//                RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
                MySingleton singleton = MySingleton.getInstance(getApplicationContext());
                RequestQueue queue = singleton.getRequestQueue();
                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) {
                        mTextViewVolley.setText(response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mTextViewVolley.setText("网络连接失败"+error.toString());
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        HashMap map = new HashMap();
                        map.put("username","heinika");
                        return map;
                    }
                };
                singleton.addToRequestQueue(request);
                break;
            case R.id.button_networkimageview:
                mNetworkImageView.setImageUrl("http://f.hiphotos.baidu.com/news/w%3D638/sign=38984923f5deb48ffb69a2ddc81e3aef/b03533fa828ba61e6db11b6d4734970a304e5911.jpg"
,MySingleton.getInstance(getApplicationContext()).getImageLoader());
                break;
            default:
                break;
        }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: