package cn.qqtheme.androidpicker; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import com.alibaba.fastjson.JSON; import java.util.ArrayList; import cn.qqtheme.framework.entity.Province; import cn.qqtheme.framework.picker.AddressPicker; import cn.qqtheme.framework.util.ConvertUtils; /** * 获取地址数据并显示地址选择器 * * @author 李玉江[QQ:1032694760] * @since 2015/12/15 */ public class AddressPickTask extends AsyncTask<String, Void, ArrayList<Province>> { private Activity activity; private ProgressDialog dialog; private Callback callback; private String selectedProvince = "", selectedCity = "", selectedCounty = ""; private boolean hideProvince = false; private boolean hideCounty = false; public AddressPickTask(Activity activity) { this.activity = activity; } public void setHideProvince(boolean hideProvince) { this.hideProvince = hideProvince; } public void setHideCounty(boolean hideCounty) { this.hideCounty = hideCounty; } public void setCallback(Callback callback) { this.callback = callback; } @Override protected void onPreExecute() { dialog = ProgressDialog.show(activity, null, "正在初始化数据...", true, true); } @Override protected ArrayList<Province> doInBackground(String... params) { if (params != null) { switch (params.length) { case 1: selectedProvince = params[0]; break; case 2: selectedProvince = params[0]; selectedCity = params[1]; break; case 3: selectedProvince = params[0]; selectedCity = params[1]; selectedCounty = params[2]; break; default: break; } } ArrayList<Province> data = new ArrayList<>(); try { String json = ConvertUtils.toString(activity.getAssets().open("city.json")); data.addAll(JSON.parseArray(json, Province.class)); } catch (Exception e) { e.printStackTrace(); } return data; } @Override protected void onPostExecute(ArrayList<Province> result) { dialog.dismiss(); if (result.size() > 0) { AddressPicker picker = new AddressPicker(activity, result); picker.setHideProvince(hideProvince); picker.setHideCounty(hideCounty); if (hideCounty) { picker.setColumnWeight(0.8f, 1.0f); } else if (hideProvince) { picker.setColumnWeight(1.0f, 0.8f); } else { picker.setColumnWeight(0.8f, 1.0f, 1.0f); } picker.setSelectedItem(selectedProvince, selectedCity, selectedCounty); picker.setOnAddressPickListener(callback); picker.show(); } else { callback.onAddressInitFailed(); } } public interface Callback extends AddressPicker.OnAddressPickListener { void onAddressInitFailed(); } }