Volley的框架的使用

volley的框架的优势:

  • 自动网络请求调度
  • 多个并发网络连接
  • 支持请求优先级
  • 取消请求API。您可以取消单个请求,也可以设置取消的时间段或范围。
  • 可轻松自定义,例如自定义重试和退避的时间
  • 强大的排序功能,让你可以轻松使用网络异步获取数据填充界面
  • 调试和跟踪工具
volley的使用详细教程

AndroidManifest.xml文件里面配置

	// 网络权限标配
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:supportsRtl="true"
       android:usesCleartextTraffic="true"
       ......
/* android:usesCleartextTraffic="true"
这一行不配置会报错,原因是,从Android P系统开始不允许明码访问了,默认都是加密连接,需要使用传输层安全协议。否则: 
java.io.IOException: Cleartext HTTP traffic to **** not permitted*/

在 build.gradle里面配置volley和Gson的库

   implementation 'com.android.volley:volley:1.1.1'
   implementation 'com.google.code.gson:gson:2.8.6'

实现的代码MainActivity和BitmapCache

package com.example.customizeview;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;

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 com.example.customizeview.Thread.TestCallable;
import com.example.customizeview.network_request.BitmapCache;
import com.google.gson.Gson;
import com.google.gson.JsonObject;

import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {
    private ListView listView_two;
    private ListView listView_one;
    private static final String TAG = "Volley";
    private ImageView iv_image;
    private NetworkImageView nv_image;
    private Button button;
    private RequestQueue queue;


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

        /*setContentView(R.layout.activity_customize_viewgroup);
        listView_one = findViewById(R.id.lv_one);
        listView_two = findViewById(R.id.lv_two);

        String[] strs_one = {"1","2","3","4","5","6","1","1","1","1","1","1","1","1"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,strs_one);
        listView_one.setAdapter(adapter);

        String[] strs_two = {"A","B","C","D","E","F","G","H","A","A","A"};
        ArrayAdapter arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,strs_two);
        listView_two.setAdapter(arrayAdapter);

        TestCallable testCallable = new TestCallable();
        try {
            testCallable.testMethodTwo();
        } catch (Exception e) {
            e.printStackTrace();
        }*/
        iv_image = findViewById(R.id.iv_image);
        nv_image = findViewById(R.id.nv_image);
        button = findViewById(R.id.bt_send);
        queue = Volley.newRequestQueue(getApplicationContext());

        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
//                UseJsonRequest();
//                UseImageRequest();
//                UseStringRequest();
//                UseImageLoder();

                UseNetWorkImageView();
            }
        });
    }

    private void UseStringRequest(){
        //创建请求队列
        StringRequest mStringRequest = new StringRequest(Request.Method.GET, "https://www.baidu.com", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d(TAG,response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG,error.getMessage(),error);
            }
        });
        //将请求加到请求队列之中
        queue.add(mStringRequest);
    }

    private void UseJsonRequest() {
        String requestBody = "ip=59.108.54.37";
        JsonObjectRequest mJsonObjectRequest = new JsonObjectRequest("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1",null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.i("a",response.toString());
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, error.getMessage(), error);
            }
        }
        );
        queue.add(mJsonObjectRequest);
    }

    private void UseImageRequest(){
        //  直接设置一个图片
        ImageRequest mImageRequest = new ImageRequest("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594373671533&di=956a90e8240e592ab77a13854db2fb92&imgtype=0&src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2F201401%2F23%2F095609lsejfi4thjrrwydj.jpg",
                new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap response) {
                        iv_image.setImageBitmap(response);
                    }
                },500,500,Bitmap.Config.RGB_565,new Response.ErrorListener(){

            @Override
            public void onErrorResponse(VolleyError error) {
                    iv_image.setImageResource(R.drawable.ic_launcher_background);
            }
        });
        mImageRequest.setTag(TAG);
        queue.add(mImageRequest);
    }

    private void UseImageLoder(){
        //先会设置一个默认的图片,当加载成功后设置加载图片
        ImageLoader loader = new ImageLoader(queue,new BitmapCache());
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv_image,R.drawable.ic_launcher_background,R.drawable.ic_launcher_background);
        loader.get("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594373671533&di=956a90e8240e592ab77a13854db2fb92&imgtype=0&src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2F201401%2F23%2F095609lsejfi4thjrrwydj.jpg",listener);
    }

    //NetworkImageView 在加载的时候像有缓存,加载第一次会有缓存存在
    private void UseNetWorkImageView(){
        ImageLoader loader = new ImageLoader(queue,new BitmapCache());
        nv_image.setDefaultImageResId(R.drawable.ic_launcher_background);
        nv_image.setErrorImageResId(R.drawable.ic_launcher_background);
        nv_image.setImageUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1594373671533&di=956a90e8240e592ab77a13854db2fb92&imgtype=0&src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2F201401%2F23%2F095609lsejfi4thjrrwydj.jpg",loader);
    }


    /**
     * onCreate  --->  onStart  ----->  onResume  ----->  onStop -----> onDestroy
     */
    @Override
    protected void onStop() {
        super.onStop();
        //  当队列不是空,页面跳转,取消信息的加载
        if(queue != null){
            queue.cancelAll(TAG);
        }
    }
}
package com.example.customizeview.network_request;

import android.graphics.Bitmap;
import android.util.LruCache;

import com.android.volley.toolbox.ImageLoader;

public class BitmapCache implements ImageLoader.ImageCache {
    //least Recently use 最近最少使用算法---->最近最少使用的将会排除掉
    private LruCache<String,Bitmap>mCache;

    public BitmapCache(){
        //最大加载8M的图片
        int maxSize = 8 * 1024 *1024;
        mCache = 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 mCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        mCache.put(url,bitmap);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值