package com.jiuqi.njt.ui.weather;
import java.lang.reflect.UndeclaredThrowableException;
import android.app.Dialog;
import android.content.Context;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.widget.Toast;
import com.jiuqi.mobile.nigo.comeclose.bean.base.AdminAreaBean;
import com.jiuqi.mobile.nigo.comeclose.exception.LoginException;
import com.jiuqi.mobile.nigo.comeclose.manager.base.IAdminAreaManager;
import com.jiuqi.mobile.nigo.comeclose.ws.client.ClientContext;
import com.jiuqi.njt.data.MyApp;
import com.jiuqi.njt.util.Constants;
import com.jiuqi.njt.util.RepairUtils;
/**
* 获取行政区划数据异步类
* @author joe
*
*/
public class GetAdminAreaDataTask extends
AsyncTask<AdminAreaBean, Void, XzqhReturnObject> {
private IAdminAreaManager manager;
private MyApp application;
private Context context;
private AdminAreaBean xzqh = null;
private AdminAreaData returnAreaData;
private Dialog pd;
public GetAdminAreaDataTask(Context context) {
super();
this.context = context;
application = (MyApp) context;
}
public GetAdminAreaDataTask(Context context, AdminAreaBean xzqh) {
super();
this.context = context;
this.xzqh = xzqh;
application = (MyApp) context;
}
/**
*
* 查询行政区划数据
* @param context 上下文环境
* @param xzqh 行政区划对象
* @param returnAreaData 返回数据接口
*/
public GetAdminAreaDataTask(Context context, AdminAreaBean xzqh,
AdminAreaData returnAreaData) {
super();
this.context = context;
this.xzqh = xzqh;
application = (MyApp) context.getApplicationContext();
this.returnAreaData = returnAreaData;
}
/**
* 将获取的行政区划数据返回
* @author joe
*
*/
public interface AdminAreaData {
/**
* 返回数据方法
* @param result 将查询到的XzqhReturnObject结果返回
*/
public void getAdminAreaBeanArray(XzqhReturnObject result);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd = RepairUtils.myShowDialog(context, 5);
}
@Override
protected XzqhReturnObject doInBackground(AdminAreaBean... params) {
// 实例化manager
XzqhReturnObject ro = new XzqhReturnObject();
ClientContext context = null;
try {
if (manager == null) {
try {
context = application.getClientContext();
if (null == context) {
context = ClientContext.getClientContext(
Constants.SERVER_URL, Constants.ANONYMOUS,
Constants.ANONYMOUS);
application.setClientContext(context);
}
manager = context.getManager(IAdminAreaManager.class);
} catch (Exception e) {
// if (e.getMessage().contains("重新登录")) {
// context = ClientContext.getClientContext(
// Constants.SERVER_URL, Constants.ANONYMOUS,
// Constants.ANONYMOUS);
// manager = context.getManager(IAdminAreaManager.class);
// application.setClientContext(context);
// }
e.printStackTrace();
}
}
// AdminAreaBean xzqh = null;
//
//如果length大于1,则查上级
if(params.length > 1){
xzqh = params[0];
AdminAreaBean p = manager.findByCode(xzqh.getpCode());
ro.data = manager.getClildNodes(p.getGuid());
ro.pxzqh = p; //manager.findByCode(xzqh.getpCode());
ro.isSuccess = true;
}
//否则就是查直接子集
else{
if (xzqh == null) {
xzqh = manager.getRootNode();
}
ro.data = manager.getClildNodes(xzqh.getGuid());
ro.pxzqh = xzqh; // manager.findByCode(xzqh.getpCode());
ro.isSuccess = true;
}
return ro;
} catch (UndeclaredThrowableException e) {
ro.isSuccess = false;
ro.exception = e;
ro.errorMsg = "UndeclaredThrowableException异常";
e.printStackTrace();
return ro;
} catch (Exception e) {
ro.isSuccess = false;
ro.exception = e;
ro.errorMsg = "其他异常";
e.printStackTrace();
return ro;
}
}
@Override
protected void onPostExecute(XzqhReturnObject result) {
RepairUtils.myRemoveDialog(pd);
if (result.isSuccess) {
if (result.pxzqh != null) {
String xzqhName = result.pxzqh.getName();
if (!TextUtils.isEmpty(xzqhName)) {
// 特殊处理根节点
if (result.pxzqh.getCode() == 0
&& result.pxzqh.getpCode() == -1) {
// btnLeft.setText(Constants.BTN_BACK_TEXT);
} else {
// 只显示 MAX_BTN_LEFT_CHARACTERS 个字
// btnLeft.setText(xzqhName.length() >
// MAX_BTN_LEFT_CHARACTERS ? xzqhName.subSequence(0,
// MAX_BTN_LEFT_CHARACTERS) : xzqhName + "..");
}
}
}
AdminAreaBean[] res = (AdminAreaBean[]) result.data;
if (res.length > 0) {
// 临时测试
if (res[0].getLevel() == 1) {
AdminAreaBean[] newData = new AdminAreaBean[res.length + 1];
for (int i = 0; i < newData.length; i++) {
if (i == 0) {
newData[0] = new AdminAreaBean();
newData[0].setName("全国");
newData[0].setProvinceName("全国");
newData[0].setProvinceCode(1);
} else {
newData[i] = res[i - 1];
}
}
res = newData;
}
} else {
showNoData();
}
returnAreaData.getAdminAreaBeanArray(result);
} else {
showNoData();
}
}
private void showNoData() {
// TODO Auto-generated method stub
if (null != context) {
Toast.makeText(context, "没有数据", Toast.LENGTH_SHORT).show();
}
}
}