网络访问之Volley

Volley请求的请求种类:
1、StringRequest:返回结果是一个字符串:

//1.创建一个请求
String url = "";
StringRequest stringRequest = new StringRequest(url, 
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {  
        }
    }, 
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    }
);
//2.创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//3.发起请求
requestQueue.add(stringRequest);

post请求:

StringRequest stringRequest = new StringRequest(Method.POST,url,listener,errorListener) {  
    @Override  
    protected Map<String, String> getParams() throws AuthFailureError {  
        Map<String, String> map = new HashMap<String, String>();  
        map.put("params1", "value1");  
        map.put("params2", "value2");  
        return map;  
    }  
};

2、JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest。
JsonObjectRequest:返回结果是一个jsonObject:

//1.创建一个请求
//null 表示get请求
JSONObject jsonRequest = null;
String url = "";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonRequest, 
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {  
        }
    }, 
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    }
);
//2.创建请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//3.发起请求
requestQueue.add(jsonObjectRequest);

3、JsonArrayRequest:返回结果是一个jsonArray:

//1.创建请求
String url = "";
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, 
    new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            Log.i( "tag", "length:" + response.length());
        }
    }, 
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    }
);
//2.创建请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//3.发起请求
requestQueue.add(jsonArrayRequest);

4、ImageRequest:返回结果是一个Bitmap:

//1.创建请求 ,maxWidth,maxHeight为0时会下载原图
int maxWidth = 0;
int maxHeight = 0;
String url = "" ;
ImageRequest imageRequest = new ImageRequest(url, 
    new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap response) {
            mImageView.setImageBitmap(response);
        }
    }, 
    maxWidth, maxHeight, Bitmap.Config.ARGB_8888, 
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            mImageView.setImageBitmap(R.drawable.error);        
        }
    }
);
//2.创建请求
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//发起请求
requestQueue.add(imageRequest);

ARGB_8888:每个图片像素占据4个字节的大小,RGB_565:每个图片像素占据2个字节大小。
5、自定义一个Request (fastjson + Request = FastJsonRequest);
6、NetWorkImageView 直接可以加载网络图片的ImageView,NetworkImageView是一个自定义控制,它是继承自ImageView的:

<com.android.volley.toolbox.NetworkImageView   
    android:id="@+id/network_image_view"  
    android:layout_width="200dp"  
    android:layout_height="200dp"  
    />
String url = "";
//请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//自定义的内存缓存
ImageLoader.ImageCache cache = new MyImageCache();
//图片下载器
ImageLoader imageLoader = new ImageLoader(requestQueue, cache);
//下载图片
networkImageView.setDefaultImageResId(R.drawable.default_image); //加载中显示的图片 
networkImageView.setErrorImageResId(R.drawable.failed_image);//加载失败时显示的图片  
networkImageView.setImageUrl(url,imageLoader);//目标图片的URL地址  
public class MyImageCache implements ImageLoader.ImageCache{
    private  int maxSize = 4 * 1024 * 1024 ;//最大缓存 4M
    private LruCache<String,Bitmap> mLruCache = new LruCache<String,Bitmap>(maxSize){
        @Override
        protected int sizeOf(String key, Bitmap value) {
            //需要复写这个方法,统一单位
            return value.getByteCount();
        }
    };

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

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

注意:
网络权限:

<uses-permission android:name="android.permission.INTERNET" /> 

扩展
1、自定义GsonRequest

public class GsonRequest<T> extends Request<T> {  

    private final Listener<T> mListener;  
    private Gson mGson;  
    private Class<T> mClass;  

    public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener,ErrorListener errorListener) {  
        super(method, url, errorListener);  
        mGson = new Gson();  
        mClass = clazz;  
        mListener = listener;  
    }  

    public GsonRequest(String url, Class<T> clazz, Listener<T> listener,ErrorListener errorListener) {  
        this(Method.GET, url, clazz, listener, errorListener);  
    }  

    @Override  
    protected Response<T> parseNetworkResponse(NetworkResponse response) {  
        try {  
            String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));  
            return Response.success(mGson.fromJson(jsonString, mClass),HttpHeaderParser.parseCacheHeaders(response));  
        } catch (UnsupportedEncodingException e) {  
            return Response.error(new ParseError(e));  
        }  
    }  

    @Override  
    protected void deliverResponse(T response) {  
        mListener.onResponse(response);  
    }  

}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值