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的二次封装