Android开源框架之Volley

在这里插入图片描述
Demo展示:

package com.example.dell.myapplication;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

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.ImageLoader;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.NetworkImageView;
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
public class VolleyActivity extends Activity {
    private TextView tv_title;
    private Button bt_volley_get;
    private Button bt_volley_post;
    private Button bt_volley_getjson;
    private Button bt_volley_imagerequest;
    private Button bt_volley_imageloader;
    private Button bt_volley_networkimageview;

    private ImageView iv_volley_result;
    private NetworkImageView iv_volley_networkimagview;
    private TextView tv_volley_result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley);

        initView();
        initListener();
    }

    private void initListener() {
        // get请求
        bt_volley_get.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个请求
                String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";

                StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
                    // 正确接收数据回调
                    @Override
                    public void onResponse(String s) {
                        tv_volley_result.setText(s);
                    }
                }, new Response.ErrorListener() {// 发生异常后的监听回调
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        tv_volley_result.setText("加载失败" + volleyError);
                    }
                });

                // 3 将创建的请求添加到请求队列中
                requestQueue.add(stringRequest);
            }
        });

        // post请求
        bt_volley_post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个post请求
                String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
                StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        tv_volley_result.setText(s);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        tv_volley_result.setText("请求失败" + volleyError);
                    }
                }) {
                // 添加请求参数的方法
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {

                        Map<String, String> map = new HashMap<String, String>();
//                        map.put("value1","param1");
                        return map;
                    }
                };
                // 3 将post请求添加到队列中
                requestQueue.add(stringRequest);
            }
        });

        // 获取json数据
        bt_volley_getjson.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个请求
                String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
                JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject jsonObject) {
                        tv_volley_result.setText(jsonObject.toString());
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        tv_volley_result.setText("请求失败" + volleyError);
                    }
                });
                // 3 将创建的请求添加到请求队列中
                requestQueue.add(jsonObjectRequest);
            }
        });

        // imagerequest加载图片
        bt_volley_imagerequest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 2 创建一个图片的请求
                String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
                ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap bitmap) {
                        // 正确接收到图片
                        iv_volley_result.setVisibility(View.VISIBLE);
                        iv_volley_result.setImageBitmap(bitmap);
                    }
                }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        iv_volley_result.setImageResource(R.drawable.atguigu_logo);
                    }
                });
                // 3 将请求添加到请求队列中
                requestQueue.add(imageRequest);
            }
        });

        // imageloader加载图片
        bt_volley_imageloader.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
                ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());

                // 加载图片
                String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
                iv_volley_result.setVisibility(View.VISIBLE);
                // 获取图片的监听:参数1:用于显示图片的ImageView控件;参数2:加载图片的过程中显示的图片
                // 参数3:加载图片失败的情况下显示的图片
                ImageLoader.ImageListener imageListener = imageLoader.getImageListener(iv_volley_result, R.drawable.atguigu_logo, R.drawable.atguigu_logo);
                imageLoader.get(url, imageListener);
            }
        });

        // networkimageview加载图片,记得布局必须是com.android.volley.toolbox.NetworkImageView
        bt_volley_networkimageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 让控件显示
                iv_volley_networkimagview.setVisibility(View.VISIBLE);

                // 创建一个请求队列
                RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);

                // 创建一个Imageloader
                ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());

                // 默认图片和异常图片设置
                iv_volley_networkimagview.setDefaultImageResId(R.drawable.atguigu_logo);
                iv_volley_networkimagview.setErrorImageResId(R.drawable.atguigu_logo);

                // 加载图片
                String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
                iv_volley_networkimagview.setImageUrl(url, imageLoader);
            }
        });
    }

    private void initView() {
        bt_volley_get = (Button) findViewById(R.id.bt_volley_get);
        bt_volley_post = (Button) findViewById(R.id.bt_volley_post);
        bt_volley_getjson = (Button) findViewById(R.id.bt_volley_getjson);
        bt_volley_imagerequest = (Button) findViewById(R.id.bt_volley_imagerequest);
        bt_volley_imageloader = (Button) findViewById(R.id.bt_volley_imageloader);
        bt_volley_networkimageview = (Button) findViewById(R.id.bt_volley_networkimageview);

        iv_volley_result = (ImageView) findViewById(R.id.iv_volley_result);
        iv_volley_networkimagview = (NetworkImageView) findViewById(R.id.iv_volley_networkimagview);
        tv_volley_result = (TextView) findViewById(R.id.tv_volley_result);
    }
}

BitmapCache 类(缓存类):

package com.example.dell.myapplication;

import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader;


public class BitmapCache implements ImageLoader.ImageCache {
    private LruCache<String, Bitmap> mCache;

    public BitmapCache() {
        int maxSize = 10 * 1024 * 1024;// 10m
        mCache = new LruCache<String, Bitmap>(maxSize) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                return bitmap.getRowBytes() * bitmap.getHeight();
            }
        };
    }
    @Override
    public Bitmap getBitmap(String url) {
        return mCache.get(url);
    }

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

布局:

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


    <Button
        android:id="@+id/bt_volley_get"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="get请求" />

    <Button
        android:id="@+id/bt_volley_post"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="post请求" />

    <Button
        android:id="@+id/bt_volley_getjson"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请求JSON数据" />

    <Button
        android:id="@+id/bt_volley_imagerequest"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ImageRequest加载图片" />

    <Button
        android:id="@+id/bt_volley_imageloader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ImageLoader加载图片" />

    <Button
        android:id="@+id/bt_volley_networkimageview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="NetWorkImageView加载图片" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示结果"
        android:textSize="20sp" />

    <ImageView
        android:id="@+id/iv_volley_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/iv_volley_networkimagview"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:visibility="gone">

    </com.android.volley.toolbox.NetworkImageView>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/tv_volley_result"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </ScrollView>
</LinearLayout>

发布了61 篇原创文章 · 获赞 0 · 访问量 878

猜你喜欢

转载自blog.csdn.net/qq_36828822/article/details/103830827