Volley的使用(三):Volley与Activity的联动 + Volley的二次封装

Volley与Activity的联动 + Volley的二次封装

Volley与Activity的联动:

在acitivity的onStop()方法中调用cancel(tag),取消request

Volley与activity的联动(把该activity中request的所有tag放在了tagList中)

@Override
protected void onStop() {
    super.onStop();
    if (tagList.size() > 0){
        for (String str : tagList) {
                MyApplication.getRequestQueue().cancelAll(str);
        }
    }
}

Volley学习视频:http://www.imooc.com/view/468

Volley的二次封装

见下图:

VolleyInterface:

package com.baidu.volleydemo03;

import android.content.Context;

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

/**
 * Created by cui on 2016/7/26.
 */
public abstract class VolleyInterface {

    public Context context;
    public static Response.Listener<String> mListener;
    public static Response.ErrorListener mErrorListener;


    protected abstract void onMyFail(VolleyError error);

    public abstract void onMySuccess(String response);

    public VolleyInterface(Context context, Response.Listener mListener, Response.ErrorListener mErrorListener) {
        this.context = context;
        this.mErrorListener = mErrorListener;
        this.mListener = mListener;
    }

    public Response.Listener loadingListener() {
        mListener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                onMySuccess(response);
            }
        };

        return mListener;
    }


    public Response.ErrorListener errorListener() {
        mErrorListener = new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                onMyFail(error);
            }
        };
        return mErrorListener;
    }
}

VolleyRequest:

package com.baidu.volleydemo03;

import android.content.Context;

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

import java.util.HashMap;
import java.util.Map;

/**
 * Created by cui on 2016/7/26.
 */
public class VolleyRequest {

    //get请求
    public static void requestGet(Context context,String url,String tag,VolleyInterface vif){
        MyApplication.getRequestQueue().cancelAll(tag);

        StringRequest request = new StringRequest(url, vif.loadingListener(), vif.errorListener());

        request.setTag(tag);
        MyApplication.getRequestQueue().add(request);
    }

    //post请求
    public static void requestPost(Context context,String url,String tag,final Map<String, String> params,VolleyInterface vif){
        MyApplication.getRequestQueue().cancelAll(tag);

        StringRequest request = new StringRequest(Request.Method.POST, url, vif.loadingListener(), vif.errorListener()){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return params;
            }
        };

        request.setTag(tag);
        MyApplication.getRequestQueue().add(request);
    }
}

MainActivity:

package com.baidu.volleydemo03;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {


    public static String TAG1 = "GET1";
    public Context context = this;
    private ArrayList<String> tagList = new ArrayList<>();
    private Button btn1;
    private Button btn2;
    private TextView tv1;
    private String url;

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

        url = "http://apis.juhe.cn/mobile/get?phone=15153519007&key=35c2071fab8cec6d4749ee4529669dee";

        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        tv1 = (TextView) findViewById(R.id.tv1);

        btn1.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
//                requestGet1();//未封装

                //封装 get请求
                VolleyRequest.requestGet(context, url, TAG1, new VolleyInterface(context,VolleyInterface.mListener,VolleyInterface.mErrorListener) {
                    @Override
                    protected void onMyFail(VolleyError error) {
                        tv1.setText(""+error);
                    }

                    @Override
                    public void onMySuccess(String response) {
                        tv1.setText(response);
                    }
                });
            }
        });



        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String url = "http://apis.juhe.cn/mobile/get?phone=13162339417";
                Map<String,String> params = new HashMap<String, String>();
                params.put("key","35c2071fab8cec6d4749ee4529669dee");
                //post请求
                VolleyRequest.requestPost(context, url, TAG1, params,new VolleyInterface(context,VolleyInterface.mListener,VolleyInterface.mErrorListener) {
                    @Override
                    protected void onMyFail(VolleyError error) {
                        tv1.setText(""+error);
                    }

                    @Override
                    public void onMySuccess(String response) {
                        tv1.setText(response);
                    }
                });
            }
        });

    }

    //未封装
    private void requestGet1() {

        tagList.add(TAG1);

        String url = "http://apis.juhe.cn/mobile/get?phone=15153519007&key=35c2071fab8cec6d4749ee4529669dee";
        StringRequest request = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
//                Toast.makeText(context, "onResponse:" + response, Toast.LENGTH_LONG).show();
                tv1.setText(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                tv1.setText(""+error);
//                Toast.makeText(context, "VolleyError:" + error, Toast.LENGTH_LONG).show();
            }
        });


        request.setTag(TAG1);
        MyApplication.getRequestQueue().add(request);
    }


    //Volley与activity的联动
    @Override
    protected void onStop() {
        super.onStop();
        if (tagList.size() > 0){
            for (String str : tagList) {
                    MyApplication.getRequestQueue().cancelAll(str);
            }
        }
    }
}

总结

Volley的使用(一):get+post
Volley的使用(二):加载网络图片
Volley的使用(三):Volley与Activity的联动 + Volley的二次封装

网络请求框架(一):android-async-http
网络请求框架(二):xUtils
网络请求框架(三):Volley

Volley的使用(一):get+post
Volley的使用(二):加载网络图片
Volley的使用(三):Volley与Activity的联动 + Volley的二次封装

网络请求框架(四):OkHttp
网络请求框架(五):Retrofit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值