Android Volley框架使用(三)

Android Volley框架使用(一)
Android Volley框架使用(二)

这次主要是自定义请求队列

主要代码:

package com.example.hfs.volleycustomrequestqueuedemo;

import android.content.Context;
import android.os.Environment;

import com.android.volley.Cache;
import com.android.volley.Network;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HttpStack;
import com.android.volley.toolbox.HurlStack;

import java.io.File;

/**
 * Created by HFS on 2016/4/26.
 */

//这个类对外提供RequestQueue请求队列
public class MyVolley {
    //    声明一个全局的RequestQueue
    public static RequestQueue mRequestQueue;

//    采用单例模式
//    1.私有构造方法 只能自己调用自己

    private MyVolley(Context context) {
//        在私有的构造方法中进行赋值
        if (mRequestQueue == null) {
            String sdPath = null;

            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                sdPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "myVolleyCache";
            } else {
                sdPath = context.getCacheDir().getAbsolutePath() + File.separator + "myVolleyCache";
            }

            File rootDirectory = new File(sdPath);

            if (!rootDirectory.exists()) {
//                文件夹不存在,创建
                rootDirectory.mkdirs();
            }
            Cache cache = new DiskBasedCache(rootDirectory, 1024 * 1024 * 200);

//            如果使用HurlStack,RequestQueue联网请求方式采用HttpUrlConnection
//            HttpClientStack 联网请求方式采用HttpClient
            HttpStack httpStack = new HurlStack();
            Network network = new BasicNetwork(httpStack);
            mRequestQueue = new RequestQueue(cache, network, 6);
        }

    }

    //    2.提供公共的访问方法
    public static RequestQueue newInstance(Context context) {

//调用私有的构造方法
        new MyVolley(context);
        return mRequestQueue;
    }

}
package com.example.hfs.volleycustomrequestqueuedemo;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;

public class MainActivity extends AppCompatActivity {
    private ImageView mImageView;
    private RequestQueue mRequestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        1.创建RequestQueue
//      这是自定义的RequestQueue缓存在SD卡
        mRequestQueue = MyVolley.newInstance(this);
//        如果是自定义的RequestQueue 必须调用start方法
        mRequestQueue.start();

        initView();
    }

    private void initView() {
        mImageView = (ImageView) findViewById(R.id.showImg);
    }

    public void btnCustomRequest(View view) {
//        2创建一个请求
        String url = "https://img-my.csdn.net/uploads/201407/26/1406382879_2553.jpg";
        ImageRequest request = new ImageRequest(url,
                new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap response) {
                        if (response != null) {
                            mImageView.setImageBitmap(response);
                        } else {
                            mImageView.setImageResource(R.mipmap.ic_launcher);
                        }
                    }
                },
                150,
                300,
                ImageView.ScaleType.FIT_XY,
                Bitmap.Config.ARGB_8888,
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this, "请求图片失败", Toast.LENGTH_SHORT).show();
                    }
                });

//        3.添加到请求队列中
        mRequestQueue.add(request);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值