android:省市县三级联动(基于json和spring)

时间:2022-03-30 16:27:35

一、请看效果图“:

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)的更多相关文章

  1. Android 省市县 三级联动(android-wheel的使用)&lbrack;转&rsqb;

    转载:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为 ...

  2. Android 省市县 三级联动(android-wheel的使用)

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...

  3. 省市县三级联动&lpar;jqurey&plus;json&rpar;

    1.效果图 2.联动js /** * jquery.choosearea.js - 地区联动封装 */ ; (function ($) { var choosearea = function (opt ...

  4. 将省市县三级联动的json数据,转化为element-ui能用的格式,并使用

    var options=[]; var cities = { '北京': { '北京': ['东城区', '西城区', '崇文区', '宣武区', '朝阳区', '丰台区', '石景山区', '海淀区 ...

  5. wex5 实战 省市县三级联动与地址薄同步

    无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2:  地址薄选项,利用inputSel ...

  6. php仿经典省市县三级联动

    之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单: 当我们选择一级栏目中某条记录的时候,会获取该栏目的vaule值,并发起ajax请求,后台根据这个vaule值, ...

  7. 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框

    JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP  mysql数据库  SpringMvc  ajax   Controller层  Service层  中国地区  省 ...

  8. jQuery - 全国省市县三级联动

    最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...

  9. 省市县三级联动 sql语句

    发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...

随机推荐

  1. 读书笔记--SQL必知必会19--存储过程

    不同的DBMS对存储过程的实现不同,差异巨大,这里不涉及具体的DBMS,仅仅说明存储过程的简单含义. 19.1 存储过程 简单来说,存储过程就是为以后使用而保存的一条或多条SQL语句. 可以将存储过程 ...

  2. 19、lambda表达式树

    一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...

  3. grads 用arcgis分析站点的网格

    第一步,用工具创建渔网(要素类) 第二步:将站点excel导入,生成点要素 站点excle,点击上面节点导出数据即可. 第三步,叠加在一起,找网格编号.

  4. Android Phonebook编写联系人UI加载及联系人保存流程(四)

    2014-01-07 10:23:22 将百度空间里的东西移过来. 5. KindSectionView KindSectionView是何方神圣呢?它又是怎么怎么和一个DataKind,以及一个Ra ...

  5. Tomcat安装、配置、优化及负载均衡详解

    一.常见JavaWeb服务器      1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解      2.Tomcat服 ...

  6. Xamarin生成的APK大小分析

    原文:Xamarin生成的APK大小分析 刚接触Xamarin都会被Xamarin的售价吓一跳,另外就是它生成的APK大小,官方也有相关的说明,这里加上自己的理解同意讲解下: 以下是针对Android ...

  7. 在VCS仿真器中使用FSDB

    FSDB(Fast Signal Database)是Verdi支持的文件格式,用于保存仿真产生的信号波形.据Verdi文档说明,FSDB比标准的VCD格式节省磁盘空间,处理速度更快.要用VCS仿真器 ...

  8. openlayers渲染mapbox gl的vector tile

    准备条件 https://openlayers.org/en/v4.6.5/build/ol.js https://cdn.polyfill.io/v2/polyfill.min.js DEMO &l ...

  9. Confluence 6 在你用户宏中使用参数

    你可以为你的用户宏指定参数.这样的话,用户可以使用参数来决定 Confluence 页面的显示情况. 如何在 Confluence 页面中使用你的宏参数 当添加一个宏到 Confluence 页面中的 ...

  10. android 如何获取当前的Activity类名

    比如友盟统计页面停留时间,咱们需要知道当前页面停留了多久. 一般我们都有一个父类Activity,用下面的方法可以获得完整的包名.类名结构 this.getLocalClassName() 输出如下: ...