package net.kornan.framework.model;
import net.kornan.framework.App;
import net.kornan.framework.network.VolleyErrorHelper;
import net.kornan.framework.utils.Status;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
public abstract class BaseModel<T> implements Listener<T>,ErrorListener{
protected Context context;
protected Handler handler;
protected RequestQueue rq;
protected ProgressDialog pd;
public BaseModel(Context context, Handler handler) {
this.handler = handler;
this.context = context;
rq = App.getInstance().getRequestQueue();
}
/**
* 设置访问网络时的进度
* @param progressDialog
*/
public void setProgressDialog(ProgressDialog progressDialog){
this.pd=progressDialog;
}
/**
* 添加网络请求
* @param req
*/
public void addRequest(Request<T> req){
if(pd!=null&&!pd.isShowing()){
pd.show();
}
req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));
App.getInstance().addToRequestQueue(req);
}
/**
* 添加网络请求
* @param req
* @param tag
*/
public void addRequest(Request<T> req,String tag){
if(pd!=null&&!pd.isShowing()){
pd.show();
}
req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));
App.getInstance().addToRequestQueue(req,tag);
}
/**
* 取消所有tag网络请求
* @param tag
*/
public void cancelRequest(String tag){
if(pd!=null&&pd.isShowing()){
pd.dismiss();
}
App.getInstance().cancelPendingRequests(tag);
}
/**
* 取消所有网络请求
*/
public void cancelRequest(){
if(pd!=null&&pd.isShowing()){
pd.dismiss();
}
App.getInstance().cancelPendingRequests();
}
/**
* 访问网络的异常处理
*/
@Override
public void onErrorResponse(VolleyError volleyError) {
// TODO Auto-generated method stub
// volleyError.
if(pd!=null&&pd.isShowing()){
pd.dismiss();
}
Toast.makeText(context, VolleyErrorHelper.getMessage(volleyError, context), Toast.LENGTH_LONG).show();
}
@Override
public void onResponse(T arg0) {
// TODO Auto-generated method stub
if(pd!=null&&pd.isShowing()){
pd.dismiss();
}
callback(arg0);
}
/**
* 响应activity的setData
* @param obj
*/
public void responseMessage(Object obj){
Message msg=new Message();
msg.what=Status.SUCCESS;
msg.obj=obj;
handler.sendMessage(msg);
}
/**
* 网络访问后的回调方法
* @param result
*/
public abstract void callback(T result);
}