第8天
收貨地址
一.三級聯動PickerView
?①.文件
<root><province name="安徽省"><city name="安慶市"><district name="樅陽縣" zipcode="246000" /><district name="大觀區" zipcode="246000" /><district name="懷寧縣" zipcode="246000" /><district name="潛山縣" zipcode="246000" /><district name="宿松縣" zipcode="246000" /><district name="太湖縣" zipcode="246000" /><district name="桐城市" zipcode="246000" /><district name="望江縣" zipcode="246000" /><district name="宜秀區" zipcode="246000" /><district name="迎江區" zipcode="246000" /><district name="岳西縣" zipcode="246000" /><district name="其他" zipcode="246000" /></city><city name="蚌埠市"><district name="蚌山區" zipcode="233000" /><district name="固鎮縣" zipcode="233000" /><district name="懷遠縣" zipcode="233000" /><district name="淮上區" zipcode="233000" /><district name="龍子湖區" zipcode="233000" /><district name="五河縣" zipcode="233000" /><district name="禹會區" zipcode="233000" /><district name="其他" zipcode="233000" /></city><city name="亳州市"><district name="利辛縣" zipcode="236000" /><district name="蒙城縣" zipcode="236000" /><district name="譙城區" zipcode="236000" /><district name="渦陽縣" zipcode="236000" /><district name="其他" zipcode="236000" /></city>
②.省?
public class ProvinceModel {private String name;private List<CityModel> cityList;public ProvinceModel() {super();}public ProvinceModel(String name, List<CityModel> cityList) {super();this.name = name;this.cityList = cityList;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<CityModel> getCityList() {return cityList;}public void setCityList(List<CityModel> cityList) {this.cityList = cityList;}@Overridepublic String toString() { // return "ProvinceModel [name=" + name + ", cityList=" + cityList + "]";return name;}} ③。市
public class CityModel {private String name;private List<DistrictModel> districtList;public CityModel() {super();}public CityModel(String name, List<DistrictModel> districtList) {super();this.name = name;this.districtList = districtList;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<DistrictModel> getDistrictList() {return districtList;}public void setDistrictList(List<DistrictModel> districtList) {this.districtList = districtList;}@Overridepublic String toString() {return "CityModel [name=" + name + ", districtList=" + districtList+ "]";}} ④.區 public class DistrictModel {private String name;private String zipcode;public DistrictModel() {super();}public DistrictModel(String name, String zipcode) {super();this.name = name;this.zipcode = zipcode;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getZipcode() {return zipcode;}public void setZipcode(String zipcode) {this.zipcode = zipcode;}@Overridepublic String toString() {return "DistrictModel [name=" + name + ", zipcode=" + zipcode + "]";}}
⑥.sax解析xml數據
public class XmlParserHandler extends DefaultHandler {/*** 存儲所有的解析對象*/private List<ProvinceModel> provinceList = new ArrayList<ProvinceModel>();ProvinceModel provinceModel = new ProvinceModel();CityModel cityModel = new CityModel();DistrictModel districtModel = new DistrictModel();public XmlParserHandler() {}//獲取所有解析對象public List<ProvinceModel> getDataList() {return provinceList;}//1.start開始解析@Overridepublic void startDocument() throws SAXException {// 當讀到第一個開始標簽的時候,會觸發這個方法}//2.解析節點@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// 當遇到開始標記的時候,調用這個方法if (qName.equals("province")) {provinceModel = new ProvinceModel();provinceModel.setName(attributes.getValue(0));provinceModel.setCityList(new ArrayList<CityModel>());} else if (qName.equals("city")) {cityModel = new CityModel();cityModel.setName(attributes.getValue(0));cityModel.setDistrictList(new ArrayList<DistrictModel>());} else if (qName.equals("district")) {districtModel = new DistrictModel();districtModel.setName(attributes.getValue(0));districtModel.setZipcode(attributes.getValue(1));}}//3.解析節點結束@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// 遇到結束標記的時候,會調用這個方法if (qName.equals("district")) {cityModel.getDistrictList().add(districtModel);} else if (qName.equals("city")) {provinceModel.getCityList().add(cityModel);} else if (qName.equals("province")) {provinceList.add(provinceModel);}}//4.獲取節點的內容@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {}//5.start結束解析@Overridepublic void endDocument() throws SAXException {super.endDocument();} }
⑦.收貨地址設置post給服務器
/*** Created by asus on 2016/11/2.*/ public class AddressAddActivity extends AppCompatActivity {@ViewInject(R.id.edittxt_consignee)//收件人姓名private ClearEditText mEditConsignee;@ViewInject(R.id.edittxt_phone)//收件人電話private ClearEditText mEditPhone;@ViewInject(R.id.edittxt_add)//收件人詳細地址private ClearEditText mEditAddr;@ViewInject(R.id.txt_address)//聯系人地址private TextView mTxtAddress;@ViewInject(R.id.toolbar)private CnToolbar mToolBar;private OptionsPickerView pvOptions;private OkHttpHelper mHttpHelper=OkHttpHelper.getInstance();private List<ProvinceModel> mProvinces;//省private ArrayList<ArrayList<String>> mCities = new ArrayList<ArrayList<String>>();//市private ArrayList<ArrayList<ArrayList<String>>> mDistricts = new ArrayList<ArrayList<ArrayList<String>>>();//縣@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_address_add);ViewUtils.inject(this);initToolbar();init();}private void initToolbar() {mToolBar.setRightButtonText("完成");mToolBar.setmRightImageButtonOnclickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {createAddress();}});}private void init() {initProvinceDatas();//選項選擇器pvOptions = new OptionsPickerView(this);pvOptions.setPicker((ArrayList) mProvinces,mCities,mDistricts,true);pvOptions.setTitle("選擇城市");pvOptions.setCyclic(false,false,false);//設置是否可以循環滾動pvOptions.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {@Overridepublic void onOptionsSelect(int options1, int option2, int options3) {String tx = mProvinces.get(options1).getName() +" "+ mCities.get(options1).get(option2) +" "+ mDistricts.get(options1).get(option2).get(options3);mTxtAddress.setText(tx);}});}//sax解析xml數據private void initProvinceDatas() {AssetManager assets = getAssets();InputStream inputStream = null;try {inputStream = assets.open("province_data.xml");SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();SAXParser parser = saxParserFactory.newSAXParser();MyxmlParserHandler myxmlParserHandler = new MyxmlParserHandler();parser.parse(inputStream,myxmlParserHandler);// 獲取解析出來的數據mProvinces = myxmlParserHandler.getDataList();} catch (Exception e) {e.printStackTrace();}finally {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}//填充數據if(mProvinces!=null){for (ProvinceModel p :mProvinces){List<CityModel> cityList = p.getCityList();//1.城市對象集合 17ArrayList<String> cityStrs = new ArrayList<>(); //城市String Listfor (CityModel c :cityList){cityStrs.add(c.getName()); //1ArrayList<ArrayList<String>> dts = new ArrayList<>(); // 地區String List1 11List<DistrictModel> districts = c.getDistrictList();//2.地區對象集合 12ArrayList<String> districtStrs = new ArrayList<>();//地區String List2 12for (DistrictModel d : districts){districtStrs.add(d.getName()); // 把城市名稱放入 districtStrs}dts.add(districtStrs);mDistricts.add(dts);}LogUtils.d("地區大小 1"+mDistricts.size());mCities.add(cityStrs); // 組裝城市數據}LogUtils.d("城市List集合 2"+mCities.size());}}//顯示三級聯動@OnClick(R.id.ll_city_picker)public void showCityPickerView(View view){pvOptions.show();}//將數據post給服務器public void createAddress(){String consignee = mEditConsignee.getText().toString();String phone = mEditPhone.getText().toString();String address = mTxtAddress.getText().toString() + mEditAddr.getText().toString();HashMap<String,Object> params = new HashMap<>(1);params.put("user_id",MyApplication.getInstance().getUser().getId());params.put("consignee",consignee);params.put("phone",phone);params.put("addr",address);params.put("zip_code","000000");mHttpHelper.post(Contants.API.ADDRESS_CREATE, params, new SpotsCallBack<BaseRespMsg>(this,false){@Overridepublic void onSuccess(Response response, BaseRespMsg baseRespMsg) {if(baseRespMsg.getStatus()==BaseRespMsg.STATUS_SUCCESS){setResult(RESULT_OK);finish();}}@Overridepublic void onError(Response response, int code, Exception e) {}});} }
/*** Created by asus on 2016/11/2.*/ public class AddressListActivity extends AppCompatActivity {@ViewInject(R.id.toolbar)private CnToolbar mToolBar;@ViewInject(R.id.recycler_view)private RecyclerView mRecyclerview;private AddressAdapter mAdapter;private OkHttpHelper mHttpHelper = OkHttpHelper.getInstance();@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_address_list);ViewUtils.inject(this);initToolbar();initAddress();}private void initToolbar() {mToolBar.setNavigationOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});mToolBar.setRightButtonIcon(getResources().getDrawable(R.drawable.icon_add));mToolBar.setmRightImageButtonOnclickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(AddressListActivity.this, AddressAddActivity.class);startActivityForResult(intent, Contants.REQUEST_CODE);}});}//請求數據private void initAddress() {HashMap<String, Object> params = new HashMap<>(1);params.put("user_id", MyApplication.getInstance().getUser().getId());mHttpHelper.get(Contants.API.ADDRESS_LIST, params, new SpotsCallBack<List<Address>>(this, false) {@Overridepublic void onSuccess(Response response, List<Address> addresses) {showAddress(addresses);//展示地址信息}@Overridepublic void onError(Response response, int code, Exception e) {}});}//展示數據private void showAddress(List<Address> addresses) {Collections.sort(addresses);//按照地址進行排序if (mAdapter == null) {mAdapter = new AddressAdapter(addresses, this);mAdapter.setOnAddressLisneter(new AddressAdapter.OnAddressLisneter() {@Overridepublic void setDefault(Address address) {//監聽checkbox的點擊事件 點擊之后更新數據,提交到服務器updateAddress(address);}@Overridepublic void deleteAddress(Address address) {todeleteAddress(address);}});mRecyclerview.setAdapter(mAdapter);mRecyclerview.setLayoutManager(new LinearLayoutManager(AddressListActivity.this));mRecyclerview.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));} else {mAdapter.refreshData(addresses);mRecyclerview.setAdapter(mAdapter);}}//刪除地址private void todeleteAddress(Address address) {HashMap<String, Object> params = new HashMap<>(1);params.put("id", address.getId());mHttpHelper.post(Contants.API.ADDRESS_DEL, params, new SpotsCallBack<BaseRespMsg>(this, false) {@Overridepublic void onSuccess(Response response, BaseRespMsg baseRespMsg) {if (baseRespMsg.getStatus() == BaseRespMsg.STATUS_SUCCESS) {initAddress();}}@Overridepublic void onError(Response response, int code, Exception e) {}});}//更新地址數據public void updateAddress(Address address) {HashMap<String, Object> params = new HashMap<>(1);params.put("id", address.getId());params.put("consignee", address.getConsignee());params.put("phone", address.getPhone());params.put("addr", address.getAddr());params.put("zip_code", address.getZipCode());params.put("is_default", address.getIsDefault());mHttpHelper.post(Contants.API.ADDRESS_UPDATE, params, new SpotsCallBack<BaseRespMsg>(this, false) {@Overridepublic void onSuccess(Response response, BaseRespMsg baseRespMsg) {if (baseRespMsg.getStatus() == BaseRespMsg.STATUS_SUCCESS) {initAddress();}}@Overridepublic void onError(Response response, int code, Exception e) {}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {//當增加了數據的時候再重新請求一次initAddress();}}
總結
- 上一篇: 亿美软通张翀:安全性是5G消息区别于其他
- 下一篇: 让ChatGPT成为全科医生的智能助理