Nohttp请求回调方法(OnResponseListener),防止多次点击!废话不多说,直接上代码:
/**
* 带ProgressDialog的请求回调防止多点
* Created by Lyx on 2017/9/13.
*/
public abstract class OnMyresponseListenerPost implements OnResponseListener<String> {
private ProgressDialog p;
private WeakReference<Context> weakReference;
private boolean isDestroy = true;
protected OnMyresponseListenerPost(Context context) {
weakReference = new WeakReference<Context>(context);
}
@Override
public void onStart(int what) {
p = new ProgressDialog(weakReference.get());
p.setMessage("请稍等...");
p.setCancelable(false);// 设置是否可以通过点击Back键取消
p.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
p.show();
}
@Override
public void onSucceed(int what, Response<String> response) {
if (isDestroy) {
OnSucceed(response);
}
}
@Override
public void onFailed(int what, Response<String> response) {
if (isDestroy) {
ToastUtils.showToast(weakReference.get(), weakReference.get().getString(R.string.network));
}
}
@Override
public void onFinish(int what) {
p.cancel();
}
public abstract void OnSucceed(Response<String> response);
//清除回调
public void clear() {
isDestroy = false;
}
}
这是我的网络请求的工具类,顺便也写一下吧
/**
* 网络请求工具类
* Created by 诸葛 on 2017/5/12.
*/
public class HttpUtil {
/**
* 待缓存的请求
*
* @param map
* @param url
* @param listener
*/
public static void get(HashMap<String, String> map, String url, OnResponseListener<String> listener) {
// RequestQueue requestQueue = NoHttp.newRequestQueue();
//步骤四.创建请求并进行发送, 处理服务端返回的数据
StringRequest request = new StringRequest(url, RequestMethod.POST);
//添加请求
request.add(map);
//第三步:Nohttp:设置缓存的五种模式:
//DEFAULT是http标准协议的缓存
// stringPostRequest.setCacheMode(CacheMode.DEFAULT);
//REQUEST_NETWORK_FAILED_READ_CACHE请求失败返回上次缓存的数据(建议使用这种)
request.setCacheMode(CacheMode.REQUEST_NETWORK_FAILED_READ_CACHE);
//NONE_CACHE_REQUEST_NETWORK在没有缓存再去请求网络
// stringPostRequest.setCacheMode(CacheMode.NONE_CACHE_REQUEST_NETWORK);
// ONLY_READ_CACHE仅仅请求缓存,如果没有缓存就会请求失败
//stringPostRequest.setCacheMode(CacheMode.ONLY_READ_CACHE);
//ONLY_REQUEST_NETWORK仅仅请求网络不支持302重定向
// stringPostRequest.setCacheMode(CacheMode.ONLY_REQUEST_NETWORK);
//设置缓存模式, 要求在离线情况下也能正常使用软件
// request.setCacheMode(CacheMode.NONE_CACHE_REQUEST_NETWORK);
// requestQueue.add(0, request, listener);
CallServer.getInstance().request(0, request, listener);
}
/**
* 不带缓存的请求
*
* @param map
* @param url
* @param listener
*/
public static void post(HashMap<String, String> map, String url, OnResponseListener<String> listener) {
// RequestQueue requestQueue = NoHttp.newRequestQueue();
//步骤四.创建请求并进行发送, 处理服务端返回的数据
StringRequest request = new StringRequest(url, RequestMethod.POST);
//添加请求
request.add(map);
// requestQueue.add(0, request, listener);
CallServer.getInstance().request(0, request, listener);
}
//单文件上传
public static void postImag(HashMap<String, String> map, String url, String filekey, File file, OnResponseListener<String> listener) {
// RequestQueue requestQueue = NoHttp.newRequestQueue();
//步骤四.创建请求并进行发送, 处理服务端返回的数据
StringRequest request = new StringRequest(url, RequestMethod.POST);
//添加请求
request.add(filekey, file);
request.add(map);
//设置缓存模式, 要求在离线情况下也能正常使用软件
// request.setCacheMode(CacheMode.NONE_CACHE_REQUEST_NETWORK);
// requestQueue.add(0, request, listener);
CallServer.getInstance().request(0, request, listener);
}
//多文件上传
public static void postImags(HashMap<String, String> map, String url, ArrayList<File> file, OnResponseListener<String> listener) {
// RequestQueue requestQueue = NoHttp.newRequestQueue();
//步骤四.创建请求并进行发送, 处理服务端返回的数据
StringRequest request = new StringRequest(url, RequestMethod.POST);
//添加请求
for (int i = 0; i < file.size(); i++) {
String fi = "file[" + i + "]";
request.add(fi, file.get(i));
}
request.add(map);
// requestQueue.add(0, request, listener);
CallServer.getInstance().request(0, request, listener);
}
}