Volley使用示例

Application中初始化的代码:

package com.myapplication.myvolleyutil.MyVolleyUtils;

import android.app.Application;

/**
 * Created by Administrator on 2016/3/7.
 * 涉及全局的内容,或者多个Activity都要使用
 * 1,全局变量注册
 * 2,地图等第三方(多个Activity都要使用时)
 * 3,生命周期从app打开到退出app
 * <p/>
 * 使用步骤:
 * 1,继承系统里面的application
 * 2,在清单文件中添加name
 */
public class MyApplication extends Application {
    private static MyApplication myApplication;

    //myApplication的开始
    @Override
    public void onCreate() {
        super.onCreate();
        myApplication = this;//系统的单例,不要new
    }

    public static MyApplication getMyApplication() {
        return myApplication;
    }
}

MyImageCache.java中代码:

package com.myapplication.myvolleyutil.MyVolleyUtils;

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

import com.android.volley.toolbox.ImageLoader;

/**
 * Created by Administrator on 2016/3/7.
 * LruCache
 * 最近最少使用算法
 * 原理:在一定容量里面,当加入内容超过容量的时候。移除最近使用使用频率最少的资源,然后将新的资源添加进来
 * 1.本身是一个链表结构
 * 2.LruCache做内存缓存时,内存容量可以自己进行设定
 */
public class MyImageCache implements ImageLoader.ImageCache {
    private LruCache<String, Bitmap> lruCache;

    public MyImageCache() {
        //分配运行内存的大小,可以手动定额分配,如
        int maxSize = 4 * 1024 * 1024;
        // 或者获取当前app总的运行内存,定比例分配,常分配1/8
        int timeSize = (int) (Runtime.getRuntime().maxMemory() / 8);
        lruCache = new LruCache<String, Bitmap>(timeSize) {
            //TODO 计算放入进来的图片大小
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getByteCount();
            }
        };
    }

    @Override
    public Bitmap getBitmap(String s) {
        //ToDo 从内存中拿到图片
        return lruCache.get(s);
    }

    @Override
    public void putBitmap(String s, Bitmap bitmap) {
        //TODO 将图片存到内存中
        lruCache.put(s, bitmap);
    }
}

接口回调StringCallBack代码:

package com.myapplication.myvolleyutil.MyVolleyUtils;

/**
 * Created by Administrator on 2016/3/7.
 */
public interface StringCallBack {
    void getString(String str);
}

VolleyUtil中的代码:

package com.myapplication.myvolleyutil.MyVolleyUtils;

import android.text.TextUtils;
import android.widget.ImageView;

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.StringRequest;
import com.android.volley.toolbox.Volley;
import com.myapplication.myvolleyutil.R;

import java.util.HashMap;

/**
 * Created by Administrator on 2016/3/7.
 * 1.需要考虑哪些是重复需要写的
 * 2.哪些是共有的(queue)(context是整个应用,还是某个activity中在传值)
 */
public class VolleyUtils {
    private RequestQueue queue;

    public VolleyUtils() {
        queue = Volley.newRequestQueue(MyApplication.getMyApplication());
    }

    /**
     * get方式网络下载字符串
     *
     * @param path           下载路径
     * @param stringCallBack 邮递员把下载的值传递出去
     */
    public void getString(String path, final StringCallBack stringCallBack) {
        StringRequest stringRequest = new StringRequest(Request.Method.GET,//请求方式
                path,//下载路径
                new Response.Listener<String>() {//响应成功时候的接口
                    @Override
                    public void onResponse(String s) {
                        if (!TextUtils.isEmpty(s)) {
                            //通过接口回调把下载到的值传递出去
                            stringCallBack.getString(s);
                        }
                    }
                },
                new Response.ErrorListener() {//响应失败时候的借口
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {

                    }
                });
    }

    /**
     * post方式网络下载字符串
     *
     * @param postPath       下载地址
     * @param map            键值对
     * @param stringCallBack 邮递员接口回调,方便传值
     */
    public void getPostString(String postPath, HashMap<String, String> map,
                              final StringCallBack stringCallBack) {
        StringRequest postRequest = new StringRequest(Request.Method.POST,
                postPath,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        if (!TextUtils.isEmpty(s)) {
                            stringCallBack.getString(s);
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
        queue.add(postRequest);
    }

    //ImageLoader方式网络下载图片
    public void getImageLoader(String imagePath, ImageView imageView) {
        // 1.创建一个ImageLoader对象
        ImageLoader loader = new ImageLoader(
                queue,//参数1.请求的对列
                new MyImageCache()// 参数2.缓存的接口,此处我们自定义类已经实现
        );

        //2.创建ImageListener对象,监视下载情况,可设置下载中图片,下载失败图片
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(
                imageView,//参数1.显示图片的控件
                R.mipmap.ic_launcher,//参数2.默认下载中显示的图片
                R.mipmap.ic_launcher//参数3.下载失败时候显示的图片
        );
        //3.调用get显示图片
        loader.get(imagePath,//参数1,图片网址
                listener,//参数2,监听图片下载的listener
                100, 100//参数3,4,图片下载到的最大的宽高
        );
    }
}

举例MainActivity中代码:

package com.myapplication.volly;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.android.volley.AuthFailureError;
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.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

/**
 * 首先导入volley的jar包
 * 网络权限
 * <p/>
 * 网络数据请求:
 * 1,json字符串的请求
 * 2,ImageView下载 缓存
 * 3,清除缓存,终止网络请求
 * <p/>
 * get:
 * 1,创建一个请求队列,建议全局只用一个
 * 2,创建一个具体的Request
 * 3,加入队列
 * <p/>
 * post请求步骤:
 * 1,创建一个请求队列,建议全局只用一个
 * 2,创建一个具体的Request,重写方法getParams();
 * 3,加入队列
 * <p/>
 * JsonObjectRequest使用步骤:
 * 1,创建一个请求队列,建议全局只用一个
 * 2,创建一个具体的Request
 * 3,加入队列
 */
public class MainActivity extends AppCompatActivity {
    // private String path = "";
    private RequestQueue queue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //请求队列创建
        queue = Volley.newRequestQueue(this);
        getString(PathUtils.getList());
        postString(PathUtils.postConmont());
        JsonRequest(PathUtils.getList());
    }

    private void JsonRequest(String path) {
        //1.请求方法2.请求目标地址3,需要上传的jsonobject对象,如果没有要上传的对象设置为null4,正确的结果响应回调5,错误的回调
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(path, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
    }

    private void postString(String path) {
        StringRequest postRequest = new StringRequest(Request.Method.POST, path, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> map = new HashMap();
                map.put("", "");

                return super.getParams();
            }
        };
    }


    private void getString(String path) {
        //1,请求的方法 2,请求网址  3,正确响应的接口回调  4,错误响应的接口回调
        StringRequest stringRequest = new StringRequest(Request.Method.GET, path, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Log.e("===", s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
        //加入队列
        queue.add(stringRequest);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值