Android实现城市选择三级联动
程序员文章站
2022-06-28 16:06:58
本文实例为大家分享了android实现城市选择三级联动的具体代码,供大家参考,具体内容如下效果图,用于城市选择三级联动,带id返回1. 添加依赖//三级联动 implementation 'com.c...
本文实例为大家分享了android实现城市选择三级联动的具体代码,供大家参考,具体内容如下
效果图,用于城市选择三级联动,带id返回
1. 添加依赖
//三级联动 implementation 'com.contrarywind:android-pickerview:4.1.8' // gosn解析 implementation 'com.google.code.gson:gson:2.8.5'
2.文件转换成json串工具类
import android.content.context; import android.content.res.assetmanager; import java.io.bufferedinputstream; import java.io.bytearrayoutputstream; import java.io.ioexception; import java.io.inputstream; /** * created by dell on 2019/9/16. */ public class jsonfilereader { public static string getjson(context context, string filename) { bytearrayoutputstream baos = new bytearrayoutputstream(); try { assetmanager assetmanager = context.getassets(); inputstream inputstream = assetmanager.open(filename); bufferedinputstream bufferedinputstream = new bufferedinputstream(inputstream); byte[] buffer = new byte[1024]; int len; while ((len = bufferedinputstream.read(buffer)) != -1) { baos.write(buffer, 0, len); } } catch (ioexception e) { e.printstacktrace(); } return baos.tostring(); } }
3.json转换成集合工具类
import android.content.context; import com.google.gson.gson; import org.json.jsonarray; import java.util.arraylist; /** * created by dell on 2019/9/16. */ public class levelslistdate { private arraylist<jsonbean> options1items = new arraylist<>(); private arraylist<arraylist<string>> options2items = new arraylist<>(); private arraylist<arraylist<arraylist<string>>> options3items = new arraylist<>(); private context context; public levelslistdate(context context) { this.context = context; } public arraylist<jsonbean> initjsondata(string path) { string jsondata = jsonfilereader.getjson(context, path); options1items.clear(); options1items = parsedata(jsondata);//用gson 转成实体 return options1items; } public arraylist<arraylist<string>> initjsondata1(string path) { string jsondata = jsonfilereader.getjson(context, path); arraylist<jsonbean> jsonbean = parsedata(jsondata);//用gson 转成实体 options2items.clear(); for (int i = 0; i < jsonbean.size(); i++) {//遍历省份 arraylist<string> citylist = new arraylist<>();//该省的城市列表(第二级) arraylist<arraylist<string>> province_arealist = new arraylist<>();//该省的所有地区列表(第三极) for (int c = 0; c < jsonbean.get(i).getcity().size(); c++) {//遍历该省份的所有城市 string cityname = jsonbean.get(i).getcity().get(c).getregion_name(); citylist.add(cityname);//添加城市 arraylist<string> city_arealist = new arraylist<>();//该城市的所有地区列表 //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃 if (jsonbean.get(i).getcity().get(c).getres() == null || jsonbean.get(i).getcity().get(c).getres().size() == 0) { city_arealist.add(""); } else { for (int d = 0; d < jsonbean.get(i).getcity().get(c).getres().size(); d++) {//该城市对应地区所有数据 string areaname = jsonbean.get(i).getcity().get(c).getres().get(d).getregion_name(); city_arealist.add(areaname);//添加该城市所有地区数据 } } province_arealist.add(city_arealist);//添加该省所有地区数据 } /** * 添加城市数据 */ options2items.add(citylist); } return options2items; } public arraylist<arraylist<arraylist<string>>> initjsondata2(string path) { string jsondata = jsonfilereader.getjson(context, path); arraylist<jsonbean> jsonbean = parsedata(jsondata);//用gson 转成实体 options3items.clear(); for (int i = 0; i < jsonbean.size(); i++) {//遍历省份 arraylist<string> citylist = new arraylist<>();//该省的城市列表(第二级) arraylist<arraylist<string>> province_arealist = new arraylist<>();//该省的所有地区列表(第三极) for (int c = 0; c < jsonbean.get(i).getcity().size(); c++) {//遍历该省份的所有城市 string cityname = jsonbean.get(i).getcity().get(c).getregion_name(); citylist.add(cityname);//添加城市 arraylist<string> city_arealist = new arraylist<>();//该城市的所有地区列表 //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃 if (jsonbean.get(i).getcity().get(c).getres() == null || jsonbean.get(i).getcity().get(c).getres().size() == 0) { city_arealist.add(""); } else { for (int d = 0; d < jsonbean.get(i).getcity().get(c).getres().size(); d++) {//该城市对应地区所有数据 string areaname = jsonbean.get(i).getcity().get(c).getres().get(d).getregion_name(); city_arealist.add(areaname);//添加该城市所有地区数据 } } province_arealist.add(city_arealist);//添加该省所有地区数据 } /** * 添加地区数据 */ options3items.add(province_arealist); } return options3items; } public arraylist<jsonbean> parsedata(string result) {//gson 解析 arraylist<jsonbean> detail = new arraylist<>(); try { jsonarray data = new jsonarray(result); gson gson = new gson(); for (int i = 0; i < data.length(); i++) { jsonbean entity = gson.fromjson(data.optjsonobject(i).tostring(), jsonbean.class); detail.add(entity); } } catch (exception e) { e.printstacktrace(); } return detail; } }
4.jsonbean类
import com.contrarywind.interfaces.ipickerviewdata; import java.util.list; /** * created by dell on 2019/9/16. */ public class jsonbean implements ipickerviewdata { /** * id : 7971 * parent_id : 7459 * region_name : 辽宁省 * city : [{"id":7972,"parent_id":7971,"region_name":"沈阳市","res":[{"id":7973,"parent_id":7972,"region_name":"和平区"},{"id":7974,"parent_id":7972,"region_name":"沈河区"},{"id":7975,"parent_id":7972,"region_name":"大东区"},{"id":7976,"parent_id":7972,"region_name":"皇姑区"},{"id":7977,"parent_id":7972,"region_name":"铁西区"},{"id":7978,"parent_id":7972,"region_name":"苏家屯区"},{"id":7979,"parent_id":7972,"region_name":"东陵区"},{"id":7980,"parent_id":7972,"region_name":"新城子区"},{"id":7981,"parent_id":7972,"region_name":"于洪区"},{"id":7982,"parent_id":7972,"region_name":"辽中县"},{"id":7983,"parent_id":7972,"region_name":"康平县"},{"id":7984,"parent_id":7972,"region_name":"法库县"},{"id":7985,"parent_id":7972,"region_name":"新民市"},{"id":7986,"parent_id":7972,"region_name":"浑南新区"},{"id":7987,"parent_id":7972,"region_name":"张士开发区"},{"id":7988,"parent_id":7972,"region_name":"沈北新区"},{"id":7989,"parent_id":7972,"region_name":"其它区"}]},{"id":7990,"parent_id":7971,"region_name":"大连市","res":[{"id":7991,"parent_id":7990,"region_name":"中山区"},{"id":7992,"parent_id":7990,"region_name":"西岗区"},{"id":7993,"parent_id":7990,"region_name":"沙河口区"},{"id":7994,"parent_id":7990,"region_name":"甘井子区"},{"id":7995,"parent_id":7990,"region_name":"旅顺口区"},{"id":7996,"parent_id":7990,"region_name":"金州区"},{"id":7997,"parent_id":7990,"region_name":"长海县"},{"id":7998,"parent_id":7990,"region_name":"开发区"},{"id":7999,"parent_id":7990,"region_name":"瓦房店市"},{"id":8000,"parent_id":7990,"region_name":"普兰店市"},{"id":8001,"parent_id":7990,"region_name":"庄河市"},{"id":8002,"parent_id":7990,"region_name":"岭前区"},{"id":8003,"parent_id":7990,"region_name":"其它区"}]},{"id":8004,"parent_id":7971,"region_name":"鞍山市","res":[{"id":8005,"parent_id":8004,"region_name":"铁东区"},{"id":8006,"parent_id":8004,"region_name":"铁西区"},{"id":8007,"parent_id":8004,"region_name":"立山区"},{"id":8008,"parent_id":8004,"region_name":"千山区"},{"id":8009,"parent_id":8004,"region_name":"台安县"},{"id":8010,"parent_id":8004,"region_name":"岫岩满族自治县"},{"id":8011,"parent_id":8004,"region_name":"高新区"},{"id":8012,"parent_id":8004,"region_name":"海城市"},{"id":8013,"parent_id":8004,"region_name":"其它区"}]},{"id":8014,"parent_id":7971,"region_name":"抚顺市","res":[{"id":8015,"parent_id":8014,"region_name":"新抚区"},{"id":8016,"parent_id":8014,"region_name":"东洲区"},{"id":8017,"parent_id":8014,"region_name":"望花区"},{"id":8018,"parent_id":8014,"region_name":"顺城区"},{"id":8019,"parent_id":8014,"region_name":"抚顺县"},{"id":8020,"parent_id":8014,"region_name":"新宾满族自治县"},{"id":8021,"parent_id":8014,"region_name":"清原满族自治县"},{"id":8022,"parent_id":8014,"region_name":"其它区"}]},{"id":8023,"parent_id":7971,"region_name":"本溪市","res":[{"id":8024,"parent_id":8023,"region_name":"平山区"},{"id":8025,"parent_id":8023,"region_name":"溪湖区"},{"id":8026,"parent_id":8023,"region_name":"明山区"},{"id":8027,"parent_id":8023,"region_name":"南芬区"},{"id":8028,"parent_id":8023,"region_name":"本溪满族自治县"},{"id":8029,"parent_id":8023,"region_name":"桓仁满族自治县"},{"id":8030,"parent_id":8023,"region_name":"其它区"}]},{"id":8031,"parent_id":7971,"region_name":"丹东市","res":[{"id":8032,"parent_id":8031,"region_name":"元宝区"},{"id":8033,"parent_id":8031,"region_name":"振兴区"},{"id":8034,"parent_id":8031,"region_name":"振安区"},{"id":8035,"parent_id":8031,"region_name":"宽甸满族自治县"},{"id":8036,"parent_id":8031,"region_name":"东港市"},{"id":8037,"parent_id":8031,"region_name":"凤城市"},{"id":8038,"parent_id":8031,"region_name":"其它区"}]},{"id":8039,"parent_id":7971,"region_name":"锦州市","res":[{"id":8040,"parent_id":8039,"region_name":"古塔区"},{"id":8041,"parent_id":8039,"region_name":"凌河区"},{"id":8042,"parent_id":8039,"region_name":"太和区"},{"id":8043,"parent_id":8039,"region_name":"黑山县"},{"id":8044,"parent_id":8039,"region_name":"义县"},{"id":8045,"parent_id":8039,"region_name":"凌海市"},{"id":8046,"parent_id":8039,"region_name":"北镇市"},{"id":8047,"parent_id":8039,"region_name":"其它区"}]},{"id":8048,"parent_id":7971,"region_name":"营口市","res":[{"id":8049,"parent_id":8048,"region_name":"站前区"},{"id":8050,"parent_id":8048,"region_name":"西市区"},{"id":8051,"parent_id":8048,"region_name":"鲅鱼圈区"},{"id":8052,"parent_id":8048,"region_name":"老边区"},{"id":8053,"parent_id":8048,"region_name":"盖州市"},{"id":8054,"parent_id":8048,"region_name":"大石桥市"},{"id":8055,"parent_id":8048,"region_name":"其它区"}]},{"id":8056,"parent_id":7971,"region_name":"阜新市","res":[{"id":8057,"parent_id":8056,"region_name":"海州区"},{"id":8058,"parent_id":8056,"region_name":"新邱区"},{"id":8059,"parent_id":8056,"region_name":"太平区"},{"id":8060,"parent_id":8056,"region_name":"清河门区"},{"id":8061,"parent_id":8056,"region_name":"细河区"},{"id":8062,"parent_id":8056,"region_name":"阜新蒙古族自治县"},{"id":8063,"parent_id":8056,"region_name":"彰武县"},{"id":8064,"parent_id":8056,"region_name":"其它区"}]},{"id":8065,"parent_id":7971,"region_name":"辽阳市","res":[{"id":8066,"parent_id":8065,"region_name":"白塔区"},{"id":8067,"parent_id":8065,"region_name":"文圣区"},{"id":8068,"parent_id":8065,"region_name":"宏伟区"},{"id":8069,"parent_id":8065,"region_name":"弓长岭区"},{"id":8070,"parent_id":8065,"region_name":"太子河区"},{"id":8071,"parent_id":8065,"region_name":"辽阳县"},{"id":8072,"parent_id":8065,"region_name":"灯塔市"},{"id":8073,"parent_id":8065,"region_name":"其它区"}]},{"id":8074,"parent_id":7971,"region_name":"盘锦市","res":[{"id":8075,"parent_id":8074,"region_name":"双台子区"},{"id":8076,"parent_id":8074,"region_name":"兴隆台区"},{"id":8077,"parent_id":8074,"region_name":"大洼县"},{"id":8078,"parent_id":8074,"region_name":"盘山县"},{"id":8079,"parent_id":8074,"region_name":"其它区"}]},{"id":8080,"parent_id":7971,"region_name":"铁岭市","res":[{"id":8081,"parent_id":8080,"region_name":"银州区"},{"id":8082,"parent_id":8080,"region_name":"清河区"},{"id":8083,"parent_id":8080,"region_name":"铁岭县"},{"id":8084,"parent_id":8080,"region_name":"西丰县"},{"id":8085,"parent_id":8080,"region_name":"昌图县"},{"id":8086,"parent_id":8080,"region_name":"调兵山市"},{"id":8087,"parent_id":8080,"region_name":"开原市"},{"id":8088,"parent_id":8080,"region_name":"其它区"}]},{"id":8089,"parent_id":7971,"region_name":"朝阳市","res":[{"id":8090,"parent_id":8089,"region_name":"双塔区"},{"id":8091,"parent_id":8089,"region_name":"龙城区"},{"id":8092,"parent_id":8089,"region_name":"朝阳县"},{"id":8093,"parent_id":8089,"region_name":"建平县"},{"id":8094,"parent_id":8089,"region_name":"喀喇沁左翼蒙古族自治县"},{"id":8095,"parent_id":8089,"region_name":"北票市"},{"id":8096,"parent_id":8089,"region_name":"凌源市"},{"id":8097,"parent_id":8089,"region_name":"其它区"}]},{"id":8098,"parent_id":7971,"region_name":"葫芦岛市","res":[{"id":8099,"parent_id":8098,"region_name":"连山区"},{"id":8100,"parent_id":8098,"region_name":"龙港区"},{"id":8101,"parent_id":8098,"region_name":"南票区"},{"id":8102,"parent_id":8098,"region_name":"绥中县"},{"id":8103,"parent_id":8098,"region_name":"建昌县"},{"id":8104,"parent_id":8098,"region_name":"兴城市"},{"id":8105,"parent_id":8098,"region_name":"其它区"}]}] */ private int id; private int parent_id; private string region_name; private list<citybean> city; public int getid() { return id; } public void setid(int id) { this.id = id; } public int getparent_id() { return parent_id; } public void setparent_id(int parent_id) { this.parent_id = parent_id; } public string getregion_name() { return region_name; } public void setregion_name(string region_name) { this.region_name = region_name; } public list<citybean> getcity() { return city; } public void setcity(list<citybean> city) { this.city = city; } @override public string getpickerviewtext() { return this.region_name; } public static class citybean { /** * id : 7972 * parent_id : 7971 * region_name : 沈阳市 * res : [{"id":7973,"parent_id":7972,"region_name":"和平区"},{"id":7974,"parent_id":7972,"region_name":"沈河区"},{"id":7975,"parent_id":7972,"region_name":"大东区"},{"id":7976,"parent_id":7972,"region_name":"皇姑区"},{"id":7977,"parent_id":7972,"region_name":"铁西区"},{"id":7978,"parent_id":7972,"region_name":"苏家屯区"},{"id":7979,"parent_id":7972,"region_name":"东陵区"},{"id":7980,"parent_id":7972,"region_name":"新城子区"},{"id":7981,"parent_id":7972,"region_name":"于洪区"},{"id":7982,"parent_id":7972,"region_name":"辽中县"},{"id":7983,"parent_id":7972,"region_name":"康平县"},{"id":7984,"parent_id":7972,"region_name":"法库县"},{"id":7985,"parent_id":7972,"region_name":"新民市"},{"id":7986,"parent_id":7972,"region_name":"浑南新区"},{"id":7987,"parent_id":7972,"region_name":"张士开发区"},{"id":7988,"parent_id":7972,"region_name":"沈北新区"},{"id":7989,"parent_id":7972,"region_name":"其它区"}] */ private int id; private int parent_id; private string region_name; private list<resbean> res; public int getid() { return id; } public void setid(int id) { this.id = id; } public int getparent_id() { return parent_id; } public void setparent_id(int parent_id) { this.parent_id = parent_id; } public string getregion_name() { return region_name; } public void setregion_name(string region_name) { this.region_name = region_name; } public list<resbean> getres() { return res; } public void setres(list<resbean> res) { this.res = res; } public static class resbean { /** * id : 7973 * parent_id : 7972 * region_name : 和平区 */ private int id; private int parent_id; private string region_name; public int getid() { return id; } public void setid(int id) { this.id = id; } public int getparent_id() { return parent_id; } public void setparent_id(int parent_id) { this.parent_id = parent_id; } public string getregion_name() { return region_name; } public void setregion_name(string region_name) { this.region_name = region_name; } } } }
5.主页调用,城市json数据很多解析耗时,进入页面会非常的慢,所以在子线程调用。有的地址没有第三级trycach,有就取没有就去二级
import android.os.handler; import android.os.message; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.textview; import com.bigkoo.pickerview.builder.optionspickerbuilder; import com.bigkoo.pickerview.view.optionspickerview; import java.util.arraylist; public class mainactivity extends appcompatactivity { private textview tvaddress; private optionspickerview pvoptions; private levelslistdate levelslistdate; private arraylist<jsonbean> jsonbeans; private arraylist<arraylist<string>> arraylists; private arraylist<arraylist<arraylist<string>>> arraylists1; private handler handler1 = new handler() { @override public void handlemessage(message msg) { super.handlemessage(msg); try { showhypickerview(); } catch (exception e) { e.printstacktrace(); } } }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); tvaddress = findviewbyid(r.id.tvaddress); tvaddress.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { if (pvoptions != null) { pvoptions.show(); } } }); new thread(new runnable() { @override public void run() { try { levelslistdate = new levelslistdate(mainactivity.this); jsonbeans = levelslistdate.initjsondata("citys_data.json"); arraylists = levelslistdate.initjsondata1("citys_data.json"); arraylists1 = levelslistdate.initjsondata2("citys_data.json"); handler1.sendemptymessage(1); } catch (exception e) { e.printstacktrace(); } } }).start(); } /** * 初始化城市选择器 */ private void showhypickerview() { //条件选择器 pvoptions = new optionspickerbuilder(mainactivity.this, new com.bigkoo.pickerview.listener.onoptionsselectlistener() { @override public void onoptionsselect(int options1, int options2, int options3, view v) { try { // cityid = jsonbeans.get(options1).getcity().get(options2).getres().get(options3).getid() + ""; tvaddress.settext(jsonbeans.get(options1).getcity().get(options2).getres().get(options3).getregion_name()); } catch (exception e) { // cityid = jsonbeans.get(options1).getcity().get(options2).getid() + ""; tvaddress.settext(jsonbeans.get(options1).getcity().get(options2).getregion_name()); } } }).build(); pvoptions.setpicker(jsonbeans, arraylists, arraylists1); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: NR/5G - 系统消息变更
下一篇: 粉红色小短裙子