1.回顾
上篇对 Volley进行了简单介绍和对它的学习目的与目标,最后,为学习Volley做了一些准备
2.重点
2.1 RequestQueue 请求队列的建立
2.2 学习 StringRequest和JsonObjectRequest ;
3.RequestQueue 请求队列的建立
新建类 volleyApplication 继承自Application , 使用单例模式创建 请求处理队列, 实现如下:
- package com.example.volleyHttp;
-
- import com.android.volley.RequestQueue;
- import com.android.volley.toolbox.Volley;
-
- import android.app.Application;
-
- public class volleyApplication extends Application {
-
-
-
-
-
-
-
- private static RequestQueue queue;
-
- @Override
- public void onCreate() {
-
- super.onCreate();
- queue=Volley.newRequestQueue(getApplicationContext());
- }
-
-
- public static RequestQueue getQueue(){
- return queue;
- }
-
-
- }
这个可以与Activity 发生联动作用,在Activity 退出的时候,可以取消的 网络请求操作(通过 tag实现);下面可以实现:
- @Override
- protected void onStop() {
-
- volleyApplication.getQueue().cancelAll("strReqGet");
- super.onStop();
- }
使用的时候需要在 AndroidMainfist.xml 文件里 的 Application 标签下 注册 刚才的 volleylication:
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- <span style="color:#ff0000;"> android:name="com.example.volleyHttp.volleyApplication"</span>
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
不要忘记了添加网络权限!
4.StringRequest 的get和post方法
4.1 get 操作
(1)实例化StringRequest 对象
(2)设置参数:请求方式,URL地址,成功的返回调用,失败的返回调用;
(3)给请求设置 tag,添加到刚才的请求队列 中!
- private void strRequest_get() {
- StringRequest request = new StringRequest(Method.GET,
- HttpPath.getSharedIfo(1), new Listener<String>() {
-
- @Override
- public void onResponse(String response) {
-
- Toast.makeText(getApplicationContext(), response,
- Toast.LENGTH_SHORT).show();
- tv.setText(response);
- }
- }, new Response.ErrorListener() {
-
- @Override
- public void onErrorResponse(VolleyError error) {
- Toast.makeText(getApplicationContext(),
- error.getMessage(), Toast.LENGTH_SHORT).show();
- }
- });
-
- request.setTag("strReqGet");
- <span style="color:#ff0000;">volleyApplication.getQueue().add(request);</span>
- }
4.2 post 操作
(1)实例化StringRequest 对象
(2)设置参数:请求方式,URL地址,成功的返回调用,失败的返回调用;
(3)Post提交的参数设置:重写 getParams 方法,返回Map集合,将自动调用;
(4)请求设置 tag,添加到刚才的请求队列 中!
-
-
-
- private void strRequest_post(){
- StringRequest stringRequest=new StringRequest(Method.POST,HttpPath.getSharedIfo_post(),new Listener<String>() {
-
- @Override
- public void onResponse(String response) {
-
- tv.setText(response);
- }
- },new Response.ErrorListener() {
-
- @Override
- public void onErrorResponse(VolleyError error) {
-
- Toast.makeText(getApplicationContext(),
- error.getMessage(), Toast.LENGTH_SHORT).show();
- }
- }){
- @Override
- protected Map<String, String> getParams() throws AuthFailureError {
-
- Map<String,String> map=new HashMap<String, String>();
- map.put("id","2");
- return map;
- }
- };
-
- stringRequest.setTag("strPost");
- volleyApplication.getQueue().add(stringRequest);
-
- }
5.JsonObjectRequest 的 get和post方法
5.1 get 方法
(1)实例化JsonObjectRequest 对象
(2)设置参数:请求方式,URL地址,参数Jsonrequest 为 null (因为为get请求),成功的返回调用,失败的返回调用;
(3)给请求设置 tag,添加到刚才的请求队列 中!
(4)请求成功后,直接返回 成 JsonObject 对象 ,可以直接使用
-
-
-
- private void jsonRequest_get(){
- JsonObjectRequest objectRequest=new JsonObjectRequest(Method.GET,HttpPath.getSharedIfo(1),
- null,new Listener<JSONObject>() {
-
- @Override
- public void onResponse(JSONObject response) {
-
- try {
- JSONObject jsonObject=new JSONObject(response.getString("data"));
- tv.setText(jsonObject.getString("note"));
- } catch (JSONException e) {
-
- tv.setText(e.getMessage());
- }
- }
- },new Response.ErrorListener() {
-
- @Override
- public void onErrorResponse(VolleyError error) {
-
- tv.setText(error.getMessage());
- }
- });
- objectRequest.setTag("jsonRequest");
- volleyApplication.getQueue().add(objectRequest);
- }
5.2 post 方法
(1)实例化JsonObjectRequest 对象
(2)设置参数:请求方式,URL地址,参数JsonRequest ,成功的返回调用,失败的返回调用;
(3)请求参数设置:通过 JsonObejct 实现 post提交 参数设置 (见示例代码)
(4)给请求设置 tag,添加到刚才的请求队列 中!
(5)请求成功后,直接返回 成 JsonObject 对象 ,可以直接使用
-
-
-
- private void jsonRequest_post(){
-
- <span style="color:#ff0000;">
- JSONObject jsonStr=new JSONObject();
- try {
- jsonStr.put("id","2");
- } catch (JSONException e1) {
-
- e1.printStackTrace();
- }
-
- JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Method.POST,HttpPath.getSharedIfo_post()
- ,jsonStr, new Listener<JSONObject>() {
-
- @Override
- public void onResponse(JSONObject response) {
-
- JSONObject jsonObject;
- try {
- jsonObject = new JSONObject(response.getString("data"));
- tv.setText(jsonObject.getString("note"));
- } catch (JSONException e) {
-
- e.printStackTrace();
- }
-
- }
- },new Response.ErrorListener() {
-
- @Override
- public void onErrorResponse(VolleyError error) {
-
- tv.setText(error.getMessage());
- }
- });
- jsonObjectRequest.setTag("jsonPost");
- volleyApplication.getQueue().add(jsonObjectRequest);
-
-
- }
6.JsonArrayRequest
这个我就不在累赘了,和 JsonObjectResquest 一样 , 只不过返回的是 JsonArray 类型!
7. 注意
RequestQueue 请求队列 在初始化的时候,一定要在 android 配置文件的Application 标签里进行注册!
使用的时候,注意 导入 包问题,ErrorListener 一定是 Response.ErrorListener;
8.ImageRequest
(1)实例化 ImageRequest 对象
(2)设置参数 :这里的HttpPath.getPic() 是 URL图片地址
(3)请求成功后,回调 bitmap对象 直接可以赋值给 ImageView
(4)需要在 请求处理队列中执行
(5)默认图片可以在加载前设置好,错误图片可以在出错的时候设置
-
-
-
- private void imageRequest_get(){
- ImageRequest imageRequest=new ImageRequest(HttpPath.getPic(),
- new Response.Listener<Bitmap>() {
-
-
- @Override
- public void onResponse(Bitmap response) {
-
- imageView1.setImageBitmap(response);
- }
- },0,0,Config.RGB_565,new Response.ErrorListener() {
-
-
- @Override
- public void onErrorResponse(VolleyError error) {
-
- tv.setText(error.getMessage());
- }
- });
- imageRequest.setTag("iamgerequest");
- volleyApplication.getQueue().add(imageRequest);
-
- }
9. ImageLoader 的使用
9.1优点
(1) 可以设置 出错的时候,显示的图片和设置默认图片!
(2) 图片缓存的实现
9.2 无缓存实现 加载一张图片
-
-
-
-
- private void imageLoader_get(){
-
-
- ImageCache cache=new ImageCache() {
-
- @Override
- public void putBitmap(String url, Bitmap bitmap) {
-
-
- }
-
- @Override
- public Bitmap getBitmap(String url) {
-
- return null;
- }
- };
-
- ImageLoader imageLoader=new ImageLoader(volleyApplication.getQueue(),cache);
-
- ImageListener imageListener=ImageLoader.getImageListener(imageView1,R.drawable.ic_launcher,R.drawable.ic_launcher);
-
-
- imageLoader.get(HttpPath.getPic(),imageListener,0,0);
-
- }
9.3 ImageLoader+LruCache 实现图片的加载和缓存
(1)实现ImageCache :这里新建一个类,继承自ImgaeCache
- package com.example.Util;
-
- import android.annotation.SuppressLint;
- import android.graphics.Bitmap;
- import android.util.LruCache;
- import com.android.volley.toolbox.ImageLoader.ImageCache;
-
- @SuppressLint("NewApi")
- public class BitmapCache implements ImageCache{
-
-
-
-
-
- private LruCache<String,Bitmap> cache;
-
-
- public BitmapCache() {
-
-
- int maxSize=10*1024*1024;
- cache=new LruCache<String,Bitmap>(maxSize){
- @Override
- protected int sizeOf(String key, Bitmap value) {
- return value.getRowBytes()*value.getHeight();
- }
- };
-
- }
-
- @Override
- public Bitmap getBitmap(String url) {
-
- return cache.get(url);
- }
-
- @Override
- public void putBitmap(String url, Bitmap bitmap) {
-
- cache.put(url, bitmap);
- }
-
- }
(2)下面实现调用即可:
-
-
-
- private void imageLoader_cache(){
-
-
-
-
- ImageLoader imageLoader=new ImageLoader(<span style="color:#ff0000;">volleyApplication.getQueue(),new BitmapCache()</span>);
-
- ImageListener imageListener=ImageLoader.getImageListener(imageView1,R.drawable.ic_launcher,R.drawable.ic_launcher);
-
-
- imageLoader.get(HttpPath.getPic(),imageListener,0,0);
-
- }
10.ImageLoader+NetWorkImageView 实现图片获取
(1)首先在布局文件里新添加 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"
- />
(2)初始化 控件
使用findViewByid 实现
(3)使用
这个方法是 传进来 图片名称,后通过Url 从服务器获取!很简单,需要实例化 ImageLoader;
-
-
-
- private void networkImageview_get(String pic){
-
- <span style="color:#ff0000;">ImageLoader imageLoader=new ImageLoader(volleyApplication.getQueue(),new BitmapCache());</span>
-
- network_image_view.setDefaultImageResId(R.drawable.ic_launcher);
- network_image_view.setErrorImageResId(R.drawable.ic_launcher);
- network_image_view.setImageUrl(HttpPath.getBasicPath()+"/"+pic,imageLoader);
-
- }