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(); } } }