Volley程序集合(使用单例,保证只会创建一个队列)

程序

单例程序

package com.test.myvolleytest;



import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.util.LruCache;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

/**
 * Created by zhonghangIT on 2015/9/14.
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
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;
    }

}

主程序

package com.test.myvolleytest;

import android.support.v7.app.ActionBarActivity;
import android.util.Log;

import org.json.JSONObject;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener {
    private Button mButton;
    private Button mButtonJson;
    private Button mButtonImageRequest;
    private Button mButtonImageLoader;
    private Button mButtonNetWorkImageView;
    private NetworkImageView mNetworkImageView;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button) findViewById(R.id.button);
        mButton.setOnClickListener(this);
        mButtonJson=(Button) findViewById(R.id.button_json);
        mButtonJson.setOnClickListener(this);
        mButtonImageRequest=(Button) findViewById(R.id.button_imagerequest);
        mButtonImageRequest.setOnClickListener(this);
        mButtonImageLoader=(Button) findViewById(R.id.button_imageloder);
        mButtonImageLoader.setOnClickListener(this);
        mButtonNetWorkImageView=(Button) findViewById(R.id.button_networkimageview);
        mButtonNetWorkImageView.setOnClickListener(this);
        imageView=(ImageView) findViewById(R.id.image);
        mNetworkImageView=(NetworkImageView) findViewById(R.id.network_image_view);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button:

            StringRequest stringRequest = new StringRequest(Request.Method.GET,"http://www.baidu.com", new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("TAG", response);
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError arg0) {
                    Log.e("TAG", arg0.getMessage(), arg0);

                }
            });
            //使用单例设计模式
            MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);
            break;
        case R.id.button_json:
            RequestQueue mQueue2 = Volley.newRequestQueue(MainActivity.this);
            //需要
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://www.weather.com.cn/adat/sk/101010100.html", null,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            Log.d("TAG", response.toString());
                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("TAG", error.getMessage(), error);
                        }
                    });
            mQueue2.add(jsonObjectRequest);
            break;
        case R.id.button_imagerequest:
            //加入了图片
            RequestQueue mQueue3 = Volley.newRequestQueue(MainActivity.this);  
            @SuppressWarnings("deprecation")
            ImageRequest imageRequest = new ImageRequest(  
                    "http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg",  
                    new Response.Listener<Bitmap>() {  
                        @Override  
                        public void onResponse(Bitmap response) {  
                            imageView.setImageBitmap(response);  
                        }  
                    }, 0, 0, Config.RGB_565, new Response.ErrorListener() {  
                        @Override  
                        public void onErrorResponse(VolleyError error) {  
                            imageView.setImageResource(R.drawable.ic_launcher);  
                        }  
                    });  
            mQueue3.add(imageRequest);  
            break;
        case R.id.button_imageloder:
            RequestQueue mQueue4 = Volley.newRequestQueue(MainActivity.this); 
            //BitmapCache为缓存图片机制,图片缓存加载,因为一般缓存为24M所以使用缓存保证能加载更多的图片。
            ImageLoader imageLoader = new ImageLoader(mQueue4,  new BitmapCache());
            //第一个图片为默认图片,第二个图片为加载失败的图片
            ImageListener listener = ImageLoader.getImageListener(imageView,  
                    R.drawable.a, R.drawable.ic_launcher);  
            imageLoader.get("http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg",  
                    listener, 200, 200);  
            break;
        case R.id.button_networkimageview:
            //不经常使用,用另一种ImagerLoder代替
            RequestQueue mQueue5 = Volley.newRequestQueue(MainActivity.this); 

            ImageLoader imageLoader2 = new ImageLoader(mQueue5,  new BitmapCache());

            mNetworkImageView.setDefaultImageResId(R.drawable.a);  
            mNetworkImageView.setErrorImageResId(R.drawable.ic_launcher);  
            mNetworkImageView.setImageUrl("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",  
                    imageLoader2);  
            break;
        default:
            break;
        }
    }

}

BitMapCache(图片缓存类)

package com.test.myvolleytest;

import com.android.volley.toolbox.ImageLoader.ImageCache;

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

public class BitmapCache implements ImageCache {  

    private LruCache<String, Bitmap> mCache;  

    public BitmapCache() {  
        int maxSize = 10 * 1024 * 1024;  
        mCache = new LruCache<String, Bitmap>(maxSize) {  
            @Override  
            protected int sizeOf(String key, Bitmap bitmap) {  
                return bitmap.getRowBytes() * bitmap.getHeight();  
            }  
        };  
    }  

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

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

}  

主布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Volley" />

    <Button
        android:id="@+id/button_json"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Json" />

    <Button
        android:id="@+id/button_imagerequest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ImageRequest" />
    <Button
        android:id="@+id/button_imageloder"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ImageLoder" />
    <Button
        android:id="@+id/button_networkimageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NetworkImageView"
        />
     <com.android.volley.toolbox.NetworkImageView   
        android:id="@+id/network_image_view"  
        android:layout_width="200dp"  
        android:layout_height="200dp"  
        android:layout_gravity="center_horizontal"  
        />  

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值