Volley框架的使用

Posted luckyblues

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Volley框架的使用相关的知识,希望对你有一定的参考价值。

刚开始觉得Volley挺难的,在网上看了些资料和视频之后,感觉用了Volley之后代码反而更简单了。
这里写图片描述

1. StringRequest

使用起来也不难:StringRequest的用法:只要三步就可以了。
当然首先你要先导入Volley的jar包或者Volley的项目。然后需要在Manifest文件中加入访问网络的权限<uses-permission android:name="android.permission.INTERNET" />

  1. Volley提供了一个简便的方法:Volley.newRequestQueue用来建立一个RequestQueue
  2. 再建立StringRequest的对象。
  3. 将StringRequest的对象添加到RequestQuene中去。

这里直接把代码贴这里,方便以后查看:
运行之后的截图:
这里写图片描述

public class MainActivity extends AppCompatActivity {
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        getStringRequestVolley();

    }
    private void getStringRequestVolley() {
        String url = "http://www.csdn.net/";
        //建立请求队列
        RequestQueue requestQuene = Volley.newRequestQueue(this);
        /**
         *  建立StringRequest的对象这个方法有三个参数的四个参数的,
         *  其中三个参数的第一个参数是url地址,第二个是响应成功的接口,第三个是响应失败的接口
         * 四个参数的第一个参数是响应的方式是GET请求还是POST请求,剩下三个和上面的一样
         */
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                //响应成功
                tv.setText(s);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                //响应失败
                Log.d("failure", volleyError.getMessage(), volleyError);
            }
        });
        //将StringRequest的对象添加到队列中
        requestQuene.add(stringRequest);
    }
}

2. JsonRequest的使用:

模拟早手机上的效果:
这里写图片描述
还是在原来的基础上增加了 getJsonObjectVolley();的方法

   private void getJsonObjectVolley() {
        final String jsonUrl = " http://api.1-blog.com/biz/bizserver/xiaohua/list.do ";
        RequestQueue requestQuene = Volley.newRequestQueue(this);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(jsonUrl, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                tv.setText(jsonObject.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.d("fail", volleyError.getMessage(), volleyError);
            }
        });
        requestQuene.add(jsonObjectRequest);
    }

3. 使用异步加载网络图片

这是加载成功之后的图片:
这里写图片描述

整个过程只需要这一个布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp" />

    <ImageView
        android:id="@+id/iv"
        android:layout_width="350dp"
        android:layout_height="300dp"
        android:gravity="center" />
</LinearLayout>

在代码中也是很简单的,只需要通过以下几步就可以完成

  1. 建立RequestQueue的对象
  2. 建立LruCache的对象,里面有个参数,需传入一个长度
  3. 创建一个ImageCache的对象,里面重写了两个方法,一个是接受图片的方法,一个是存放图片的方法
  4. 创建ImageLoader对象,里面有两个参数,一个是RequestQueue的对象,一个是ImageCache对象
  5. 通过imageLoader的getImageListener方法获得ImageListener对象,里面闯入三个参数, 第一个是view对象,其实这里就对应一张图片,第二个参数是没加载之前默认的图片,第三个参数是加载失败后的图片
  6. 最后一步是通过ImageLoader的get方法,有两个参数,一个是图片地址,一个是刚刚的listerer
private void getImageVolley() {

        String imageUrl = "http://pic.sc.chinaz.com/files/pic/pic9/201508/apic14052.jpg";

        //1.建立RequestQueue的对象
        RequestQueue requestQuene = Volley.newRequestQueue(this);

        //2.建立LruCache的对象,里面有个参数,需传入一个长度
        final LruCache<String, Bitmap> lruCache = new LruCache<>(20);

        //3.创建一个ImageCache的对象,里面重写了两个方法,一个是接受图片的方法,一个是存放图片的方法
        final ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {
            @Override
            public Bitmap getBitmap(String s) {
                return lruCache.get(s);
            }

            @Override
            public void putBitmap(String s, Bitmap bitmap) {
                lruCache.put(s, bitmap);
            }
        };
        //创建ImageLoader对象,里面有两个参数,一个是RequestQueue的对象,一个是ImageCache对象
        ImageLoader imageLoader = new ImageLoader(requestQuene, imageCache);
        /**
         * 通过imageLoader的getImageListener方法获得ImageListener对象,里面闯入三个参数,
         * 第一个是view对象,其实这里就对应一张图片,第二个参数是没加载之前默认的图片,第三个参数是加载失败后的图片
         */
        ImageLoader.ImageListener listener = imageLoader.getImageListener(iv, R.mipmap.ic_launcher, R.mipmap.ic_launcher);

        //最后一步是通过ImageLoader的get方法,有两个参数,一个是图片地址,一个是刚刚的listerer
        imageLoader.get(imageUrl, listener);
    }

4. 使用NetworkImageView加载图片:

模拟的效果和上个一样,这里我又改了图片的地址,最终模拟的效果如图:
这里写图片描述

NetworkImageView是继承自ImageView的,所以这里把它当做控件

这里在要在原来布局的基础上加上以下代码


    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/iv2"
        android:layout_width="350dp"
        android:layout_height="300dp"
        android:gravity="center" />

代码中


NetworkImageView   networkImageView = (NetworkImageView) findViewById(R.id.iv2);

    private void getNetWorkImageViewVolley() {
        String url = "http://file03.16sucai.com/2015/09/2015m4otokzkzc5.jpg";
        RequestQueue requestQuene = Volley.newRequestQueue(this);
        final LruCache<String, Bitmap> lruCache = new LruCache<>(20);
        ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() {
            @Override
            public Bitmap getBitmap(String s) {
                return lruCache.get(s);
            }

            @Override
            public void putBitmap(String s, Bitmap bitmap) {
                lruCache.put(s, bitmap);
            }
        };
        ImageLoader imageLoader = new ImageLoader(requestQuene, imageCache);
        networkImageView.setTag("url");
        networkImageView.setImageUrl(url, imageLoader);
    }

以上是关于Volley框架的使用的主要内容,如果未能解决你的问题,请参考以下文章

无法通过使用 Volley 库中的 Intent 从片段中移动下一个 Activity

Volley框架源代码分析

Volley框架的使用

Volley框架源码分析

Android Volley 框架的使用

源码解析Volley框架