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);
}
}