android:省市县三级联动(基于json和spring)
一、请看效果图“:
二、程序的代码:
1、MainActivity.java
package com.loveplusplus.loader.demo.ui;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.loveplusplus.loader.demo.R;
import com.loveplusplus.loader.demo.util.HttpService;
/**
* 省市县三级联动
*
* 2014年10月30日 15:22:04
*
* @author YJBo
*
*/
public class MainActivity extends Activity {
private static final String HOST_URL = "http://218.241.233.121/yqw";
private static final String PROVINCE_URL = "http://218.241.233.121/yqw/w/c/post?app=join&mdl=web&act=provinces&type=json";
private static final String CITY_URI = HOST_URL
+ "/w/c/post?
app=join&mdl=web&type=json&act=citys&col.province=";
private static final String COUNTY_URL = HOST_URL
+ "/w/c/post?
app=join&mdl=web&type=json&act=areas&col.city=";
// col.province
private Spinner provinceSpinner;
private Spinner citySpinner;
private Spinner countySpinner;
// 省市县数组
private String[] Province;
private String[] ProvinceCode;
private String json;
// 市---
private String json2;
private String[] City;
private String[] CityCode;
// 县
private String json3;
private String[] Country;
private String[] CountryCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取省的名称
loadProvices();
}
private void loadProvices() {
new Thread(new Runnable() {
@Override
public void run() {
try {
// 初步进入页面。获取全部省份
json = HttpService.postParamAndFileOB(PROVINCE_URL);
mHandler.sendEmptyMessage(1);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
// 市---新
private void loadCitys2(final String provinceCode) {
if (null == provinceCode)
return;
new Thread(new Runnable() {
@Override
public void run() {
try {
// 获取一个省的全部市
json2 = HttpService.postParamAndFileOB(CITY_URI
+ provinceCode);
mHandler.sendEmptyMessage(2);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
// 县
private void loadCitys3(final String CountryCode) {
if (null == CityCode)
return;
new Thread(new Runnable() {
@Override
public void run() {
try {
// 获取县份数据
json3 = HttpService.postParamAndFileOB(COUNTY_URL
+ CountryCode);
mHandler.sendEmptyMessage(3);
System.out.println("------sheng----麻烦呢--33--");
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
try {
JSONArray array = new JSONArray(json);
Province = new String[array.length()];
ProvinceCode = new String[array.length()];
for (int i = 0; i < array.length(); i++) {
JSONObject obj = (JSONObject) array.get(i);
Province[i] = obj.getString("name");
ProvinceCode[i] = obj.getString("code");
}
provinceSpinner = (Spinner) findViewById(R.id.spinner_province);
// 初始化下拉列表载入数据适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_item, Province);
// 设置下拉列表的样式,下为设置为简单样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 将数据载入进下拉列表其中
provinceSpinner.setAdapter(adapter);
// 加入事件Spinner事件监听,当点击下拉列表中的某一选项之后触发该事件
provinceSpinner
.setOnItemSelectedListener(new SpinnerSelectedListener());
// 设置默认值
provinceSpinner.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
break;
// 市
case 2:
try {
JSONArray array = new JSONArray(json2);
City = new String[array.length()];
CityCode = new String[array.length()];
for (int i = 0; i < array.length(); i++) {
JSONObject obj = (JSONObject) array.get(i);
City[i] = obj.getString("name");
CityCode[i] = obj.getString("code");
}
citySpinner = (Spinner) findViewById(R.id.spinner_city);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_item, City);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
citySpinner.setAdapter(adapter);
citySpinner.setOnItemSelectedListener(new SpinLisSHi());
citySpinner.setVisibility(View.VISIBLE);
} catch (JSONException e) {
e.printStackTrace();
}
break;
// 县
case 3:
try {
JSONArray array = new JSONArray(json3);
Country = new String[array.length()];
CountryCode = new String[array.length()];
for (int i = 0; i < array.length(); i++) {
JSONObject obj = (JSONObject) array.get(i);
Country[i] = obj.getString("name");
CountryCode[i] = obj.getString("code");
}
countySpinner = (Spinner) findViewById(R.id.spinner_county);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_item, Country);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
countySpinner.setAdapter(adapter);
countySpinner.setOnItemSelectedListener(new SpinLisXian());
countySpinner.setVisibility(View.VISIBLE);
} catch (JSONException e) {
e.printStackTrace();
}
break;
default:
break;
}
super.handleMessage(msg);
}
};
class SpinnerSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(MainActivity.this, Province[arg2], 3000).show();
// 下载市的名称
loadCitys2(ProvinceCode[arg2]);
}
public void onNothingSelected(AdapterView<?
> arg0) {
}
}
// 市
class SpinLisSHi implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?
> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(MainActivity.this, City[arg2], 3000).show();
// 下载县的名称
loadCitys3(CityCode[arg2]);
}
public void onNothingSelected(AdapterView<?
> arg0) {
}
}
// 县
class SpinLisXian implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(MainActivity.this,
Country[arg2] + CountryCode[arg2], 3000).show();
}
public void onNothingSelected(AdapterView<?> arg0) {
}
}
}
2、httpService.java
package com.loveplusplus.loader.demo.util;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
/**
* 2014年7月20日 16:26:40 这里是解析url的;
*
* @author YJBo
*/
public class HttpService {
public static void main(String[] args) {
}
public static String postParamAndFileOB(String url) {
// http地址
String httpUrl = url;
System.out.println("此时的OB地址httpUrl++==" + httpUrl);
System.out
.println("--------------数据库正在链接中····----------------------------");
try {
// HttpGet连接对象
HttpPost httpRequest = new HttpPost(httpUrl);
System.out.println("==wo走到这里了 20===");
System.out.println("==wo走到这里了 21===");
// 使用NameValuePair来保存要传递的Post參数
List<NameValuePair> params = new ArrayList<NameValuePair>();
// 设置字符集
HttpEntity httpentity = new UrlEncodedFormEntity(params, "UTF-8");
// 请求httpRequest
httpRequest.setEntity(httpentity);
// 取得HttpClient对象
HttpClient httpclient = new DefaultHttpClient();
// 请求HttpClient。取得HttpResponse
HttpResponse httpResponse = httpclient.execute(httpRequest);
System.out.println("==wo走到这里了 23===");
// 请求成功
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
// 取得返回的字符串
System.out.println("==wo走到这里了 24===");
String strResultOB = EntityUtils.toString(httpResponse
.getEntity());
// .getEntity();
System.out.println("==wo走到这里了 22===" + strResultOB);
return strResultOB;
} else {
System.out.println("数据请求失败====");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
3.activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:text="@string/select_province"
android:textSize="20sp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/separator_line"
android:contentDescription="@string/app_name" />
<Spinner
android:id="@+id/spinner_province"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:text="@string/select_city"
android:textSize="20sp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/separator_line"
android:contentDescription="@string/app_name" />
<Spinner
android:id="@+id/spinner_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:text="@string/select_county"
android:textSize="20sp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/separator_line"
android:contentDescription="@string/app_name" />
<Spinner
android:id="@+id/spinner_county"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
</LinearLayout>
</LinearLayout>
android:省市县三级联动(基于json和spring)的更多相关文章
- Android 省市县 三级联动(android-wheel的使用)[转]
转载:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为 ...
- Android 省市县 三级联动(android-wheel的使用)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...
- 省市县三级联动(jqurey+json)
1.效果图 2.联动js /** * jquery.choosearea.js - 地区联动封装 */ ; (function ($) { var choosearea = function (opt ...
- 将省市县三级联动的json数据,转化为element-ui能用的格式,并使用
var options=[]; var cities = { '北京': { '北京': ['东城区', '西城区', '崇文区', '宣武区', '朝阳区', '丰台区', '石景山区', '海淀区 ...
- wex5 实战 省市县三级联动与地址薄同步
无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2: 地址薄选项,利用inputSel ...
- php仿经典省市县三级联动
之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单: 当我们选择一级栏目中某条记录的时候,会获取该栏目的vaule值,并发起ajax请求,后台根据这个vaule值, ...
- 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框
JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP mysql数据库 SpringMvc ajax Controller层 Service层 中国地区 省 ...
- jQuery - 全国省市县三级联动
最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...
- 省市县三级联动 sql语句
发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...
随机推荐
- sql server数据类型与其他数据库数据类型对应关系
SELECT * FROM msdb.dbo.MSdatatype_mappings SELECT * FROM msdb.dbo.sysdatatypemappings
- 从mysql全库备份中恢复指定库和指定表
需求:开发要求导入某天某个表的数据,而我们的数据是全库备份 例如: 从newbei_2017-08-31_402793782.tar.bz2中恢复表:bei_table 的数据 一.备份策略 备份全 ...
- 单页vue路由router
Vue.js + vue-router 可以很简单的实现单页应用. <router-link> 是一个组件,该组件用于设置一个导航链接,切换不同 HTML 内容. to 属性为目标地址, ...
- 【计算机网络】2.5 DNS:因特网的目录服务
第二章第五节 因特网的目录服务 DNS(域名系统)提供了一种能运行主机名到IP地址转换的因特网目录服务:一方面,他让人能够记住如taobao.com这样的主机别名:另一方面,他提供给路由器可理解的IP ...
- iOS中声音采集与播放的实现(使用AudioQueue)
都说iOS最恶心的部分是流媒体,其中恶心的恶心之处更在即时语音. 所以我们先不谈即时语音,研究一下,iOS中声音采集与播放的实现. 要在iOS设备上实现录音和播放功能,苹果提供了简单的做法,那就是利用 ...
- vue中axios发送post请求,后端(@RequestParam)接不到参数
遇到的问题描述 :axios post 请求,后端接收不到参数. 我们的接口是java,用@RequestParam来接收前端的参数 解决方案:使用qs:axios中已经包含有qs,所以无需重新安装, ...
- 笔试算法题(42):线段树(区间树,Interval Tree)
议题:线段树(Interval Tree) 分析: 线段树是一种二叉搜索树,将一个大区间划分成单元区间,每个单元区间对应一个叶子节点:内部节点对应部分区间,如对于一个内部节点[a, b]而言,其左子节 ...
- [LUOGU] P1316 丢瓶盖
题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出 ...
- MySql-count(*)与count(id)与count(字段)之间的执行结果和性能分析
在mysql数据库中,当我们需要统计数据的时候,一定会用到count()这个方法,那么count(值)里面的这个值,到底应该怎么选择呢!常见有3种选择,(*,数字,列名),分别列出它们的执行结果和性能 ...
- CSS3 @font-face的url要添加?#iefix的原因
转至:https://github.com/CSSLint/csslint/wiki/Bulletproof-font-face When using @font-face to declare mu ...