Volley与Activity生命周期联动及简单的二次封装

这篇博客探讨了如何在Activity的onStop方法中取消Volley请求队列中的请求,实现生命周期联动。同时,文章介绍了Volley的简单二次封装,通过创建抽象类VolleyInterface和VolleyRequest,便于统一设置接口提示信息,简化代码重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity关闭时取消请求队列中的请求:

可以在上一篇博客中的例子MainActivity的onStop方法中添加如下代码:

@Override
    protected void onStop() {
        super.onStop();
        //通过Tag标签取消请求队列中对应的全部请求
        MyApplication.getHttpQueue().cancelAll("abcPost");
    }

Volley简单的二次回调封装

二次封装的好处在于,可以在接口中统一设置提示信息,不需要在每个方法中都写一遍。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.learning.volleydemo03">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name=".MyApplication">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

MyApplication.java

import android.app.Application;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

public class MyApplication extends Application {
    public static RequestQueue queue;

    @Override
    public void onCreate() {
        super.onCreate();
        queue = Volley.newRequestQueue(getApplicationContext());
    }

    public static RequestQueue getHttpQueue(){
        return queue;
    }
}

创建一个抽象类,封装两个关键的方法
VolleyInterface.java

import android.content.Context;

import com.android.volley.Response;
import com.android.volley.VolleyError;

public abstract class VolleyInterface {
    //上下文
    public static Context context;
    //请求成功
    public static Response.Listener<String> listener;
    //请求失败
    public static Response.ErrorListener errorListener;

    public VolleyInterface(Context mContext, Response.Listener<String> mListener, Response.ErrorListener mErrorListener){
        this.context = mContext;
        this.listener = mListener;
        this.errorListener = mErrorListener;
    }

    public abstract void onMySuccess(String result);
    public abstract void onMyError(VolleyError error);

    //请求成功的监听方法
    public Response.Listener<String> loadingListener(){
        //请求成功实例化
        listener = new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                //这里可以添加成功提示
                onMySuccess(s);
            }
        };
        return listener;
    }
    //请求失败的监听方法
    public Response.ErrorListener errorListener(){
        //请求失败实例化
        errorListener = new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                onMyError(volleyError);
                //这里可以添加成功提示
            }
        };
        return errorListener;
    }
}

创建一个请求管理VolleyRequest
VolleyRequest.java

import android.content.Context;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.toolbox.StringRequest;

import java.util.Map;

public class VolleyRequest {
    public static StringRequest stringRequest;
    public static Context context;


    public static void RequestGet(
        Context mContext,//上下文
        String url,
        String tag,
        VolleyInterface vif)//请求回调的接口,请求成功和失败
        {
        //防止重复请求
        MyApplication.getHttpQueue().cancelAll(tag);
        stringRequest = new StringRequest(Request.Method.GET,url,
                vif.loadingListener(),vif.errorListener());
        stringRequest.setTag(tag);
        //请求添加到队列中
        MyApplication.getHttpQueue().add(stringRequest);
        MyApplication.getHttpQueue().start();
    }

    public static void RequestPost(
          Context mcontext,//上下文
          String url, 
          String tag, 
          final Map<String,String> params,//请求参数,通过Map传递
          VolleyInterface vif)//回调接口
          {
          //获取请求队列,cancelAll防止重复请求
        MyApplication.getHttpQueue().cancelAll(tag);
        stringRequest = new StringRequest(url,vif.loadingListener(),
                vif.errorListener()){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return params;
            }
        };
        stringRequest.setTag(tag);
        MyApplication.getHttpQueue().add(stringRequest);
        MyApplication.getHttpQueue().start();
    }
}

MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.android.volley.VolleyError;

public class MainActivity extends AppCompatActivity {

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

    public void volley_Get() {
        String url=
        "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443";
        VolleyRequest.RequestGet(this, url, "abcGet",
                new VolleyInterface   (this,VolleyInterface.listener,VolleyInterface.errorListener) {
                    @Override
                    public void onMySuccess(String result) {
                        Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onMyError(VolleyError error) {
                        Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show();
                    }
                });
    }
}

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值