`
stone02111
  • 浏览: 215213 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 实现省份城市的选择,并获取城市编号

 
阅读更多

 

该程序主要使用 中央气象局 省份 城市数据库为基础 进行读取

 城市数据库下载   http://download.csdn.net/download/xianqiang1/3896880   感谢该兄弟的分享

下载的数据库  db_weather.db  放到sdcard/weather 目录下面 方便后续操作

 

为了更好的了解数据库,使用 SQLite Database Browser  可以打开数据库 查看数据 和表等信息,如下

 

 

 

   了解了表的构成可以实现操作了

 

androidManifest.xml

配置文件声明  添加操作sdcard 权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cityselection"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <!-- sdcard操作允许 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".City_SelectionActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
 

布局文件main.xml

主要使用两个 spinner  分别实现城市 省份的选择

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:text="省份/直辖市"
        android:textSize="20dp"
        android:textStyle="bold"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       />
    <Spinner
        android:id="@+id/provinces"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       />
     <TextView
        android:text="市/县"
        android:textSize="20dp"
        android:textStyle="bold"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       />
    <Spinner
        android:id="@+id/city"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>
 

主程序City_SelectionActivity.java

package com.cityselection;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
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;

public class City_SelectionActivity extends Activity {
    /** Called when the activity is first created. */
	
	private File f = new File("/sdcard/weather/db_weather.db"); //数据库文件
	
	private Spinner province;  //省份spinner
	private Spinner city;      //城市spinner
	
	private List<String> proset=new ArrayList<String>();//省份集合
	private List<String> citset=new ArrayList<String>();//城市集合
	
	private int pro_id;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        province=(Spinner)findViewById(R.id.provinces);
        ArrayAdapter<String> pro_adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,getProSet());
        province.setAdapter(pro_adapter);
        province.setOnItemSelectedListener(new SelectProvince());
        
        city=(Spinner)findViewById(R.id.city);
        city.setOnItemSelectedListener(new SelectCity());
    }
   
    //选择改变状态
    class SelectProvince implements OnItemSelectedListener{
    	public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
    		// TODO Auto-generated method stub
    		//获得省份ID
    		pro_id=position;  		
    		city.setAdapter(getAdapter());
    		
    	}
    	public void onNothingSelected(AdapterView<?> arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    }
    
    //城市 选择改变状态
    class SelectCity implements OnItemSelectedListener{
    	public void onItemSelected(AdapterView<?> parent, View view,
				int position, long id) {
    		// TODO Auto-generated method stub
    		String cityname=parent.getItemAtPosition(position).toString();
    		//选择提示
    		Toast.makeText(getApplicationContext(), cityname+" "+getCityNum(position), 2000).show();
    	    
    	  
    	}
    	public void onNothingSelected(AdapterView<?> arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    }
    
    /**
     * 返回 省份集合
     */
    public List<String> getProSet(){
       //打开数据库 
    	SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(f, null);
 		Cursor cursor=db1.query("provinces", null, null, null, null, null, null);
 		while(cursor.moveToNext()){
 			String pro=cursor.getString(cursor.getColumnIndexOrThrow("name"));
 			proset.add(pro);
 		}
 		cursor.close();
 		db1.close();
    	return proset;
    }
    /**
     * 返回 城市集合
     */
    public List<String> getCitSet(int pro_id){
    	//清空城市集合
    	citset.clear();
       //打开数据库 
    	SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(f, null);
 		Cursor cursor=db1.query("citys", null, "province_id="+pro_id, null, null, null, null);
 		while(cursor.moveToNext()){
 			String pro=cursor.getString(cursor.getColumnIndexOrThrow("name"));
 			citset.add(pro);
 		}
 		cursor.close();
 		db1.close();
    	return citset;
    }
    /**
     * 返回适配器
     */
    public ArrayAdapter<String> getAdapter(){
    	  ArrayAdapter<String> adapter1=new ArrayAdapter(this, android.R.layout.simple_spinner_item,getCitSet(pro_id));
          return adapter1;
    }
     /**
      * 返回城市编号  以便调用天气预报api
      */
    public long getCityNum(int position){
    	SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(f, null);
 		Cursor cursor=db1.query("citys", null, "province_id="+pro_id, null, null, null, null);
 		cursor.moveToPosition(position);
 		long citynum=Long.parseLong(cursor.getString(cursor.getColumnIndexOrThrow("city_num")));
 		cursor.close();
 		db1.close();
 		return citynum;
    }
    
}
 

 

实现结果:

分享到:
评论

相关推荐

    Android 实现城市省份的选择

    这个场景可以通过创建一个联动的下拉选择器(Spinner)来实现,让用户能够逐级选择省份和城市,并获取到对应的城市编号。下面将详细介绍如何在Android中实现这样的功能。 首先,我们需要准备省份和城市的数据库或...

    android利用AlertDialog实现省份城市的选择

    利用AlertDialog弹出对话框实现省份城市的选择,直接运行就可以,省份城市数据直接存在android项目的values目录的arrays.xml下,只需要在里面添加城市就可以增加省份与城市,另外实现了点击省份出现相应的城市,其实这...

    PickView实现时间和省份城市选择

    在这个"PickView实现时间和省份城市选择"的项目中,开发者提供了一个完整的解决方案,帮助你在Android应用中轻松添加这种功能。 项目名称"PickerViewDemo-master"表明这是一个关于PickerView的示例代码库,包含了主...

    Android地名选择器 全国省市区选择器 城市选择 区县选择

    "Android地名选择器 全国省市区选择器 城市选择 区县选择"是一个针对这种需求的专业组件,它允许用户在应用程序内方便地挑选中国境内的省份、城市以及区县。这个组件通常包含一个层次化的列表视图,用户可以逐级下拉...

    android 二级城市选择

    首先,从标题“android 二级城市选择”来看,我们要构建的是一个具有层级关系的城市列表,用户可以逐级选择省份和城市。在这个过程中,我们需要设计用户界面(UI),包括布局文件和自定义控件,以便呈现清晰、易于...

    SelectCityDome仿美团网,探索ListView的A-Z字母排序功能实现选择省份或者城市AndroidStudio版本已修改为23.zip

    总的来说,"SelectCityDome"项目展示了如何利用ListView和自定义Adapter实现一个功能完善的省份城市选择器,包括数据排序、快速定位和性能优化等多个方面,这对于Android开发者来说是很好的学习和参考实例。...

    获取省份列表和城市列表

    解析数据和获取数据

    android 城市三级联动 获取城市名和城市编码

    在给定的“android 城市三级联动 获取城市名和城市编码”项目中,我们将会讨论如何利用本地XML文件存储城市数据,以及如何通过PopupWindow和ListView来实现这个功能。 首先,XML文件是存储结构化数据的常见方式,...

    安卓三级联动省市联动多级联动相关-Android实现城市名称和编码的选择省份与城市的联动并且获得城市编号为后面天气预报调用Api提供帮助.rar

    在这个项目中,开发者创建了一个Android应用,允许用户选择省份、城市,并获取城市编号,以便后续调用天气预报API。 首先,我们来看"三级联动"的概念。这通常指的是在一个表单或菜单中,有三个级别的选项相互关联,...

    Android 仿美团网,探索ListView的A-Z字母排序功能实现选择省份或者城市

    三:汉字转成拼音的功能,很多时候实现联系人或者城市列表等实现A-Z的排序功能,我们可以直接从数据库中获取他的汉字拼音,而对于一般的数据,我们怎么实现A-Z的排序,这里我使用了PinYin4j.jar将汉字转换为拼音. ...

    仿微信城市选择(android)

    这个功能实现的核心在于构建一个可滚动的选择界面,包含省份和城市的数据,并能够进行交互操作。以下是对这个知识点的详细说明: 1. **布局设计**: - 使用`RecyclerView`或`ListView`来展示城市列表,这两个组件...

    Android选择城市Demo,可根据拼音、首字母搜索

    这个"Android选择城市Demo"提供了一种实现方式,允许用户通过输入城市拼音或首字母进行快速搜索。以下是关于这个Demo的一些关键知识点: 1. **ListView与Adapter**: 选择城市界面通常会使用ListView来展示城市列表...

    android带ListView的对话框,选择省份城市

    在Android开发中,创建一个带有ListView的对话框是常见的需求,比如在用户需要选择省份或城市时。这个场景可以通过自定义对话框实现,提供更好的用户体验。以下是对标题和描述中涉及知识点的详细解释: 1. **...

    android省市区城市三级列表选择

    综上所述,实现“android省市区城市三级列表选择”需要掌握SQLite数据库操作、自定义Adapter、ListView的使用、多线程数据加载以及良好的用户交互设计等多个Android开发关键知识点。通过这个功能的实现,开发者可以...

    Android ListView三级联动实现地址选择器

    在选择省份时,我们需要监听ListView的onItemClick事件,获取选中的省份ID,然后加载对应的市级数据。同理,当市级和区级ListView的选择发生变化时,也需要更新下一级的数据。为了实现联动效果,我们可以设置...

    android源码全国城市选择列表Demo

    【Android源码全国城市选择列表Demo】是一款专为Android初学者设计的小型示例应用,旨在帮助开发者了解如何在Android项目中实现一个全国城市的选择列表。这个Demo将城市数据存储在SQLite数据库中,并提供了灵活的...

    Android选择城市列表

    综上所述,实现"Android选择城市列表"不仅需要理解并运用Android的基础组件和数据结构,还需要掌握数据加载、用户交互和性能优化等相关技术。通过合理的编程实践,可以构建出高效且用户友好的城市选择功能。

    Android省市区三级联动滚轮选择——Cascade_Master

    在省市区三级联动中,当用户在一级(省)选择后,二级(市)会自动更新为对应省份的城市,同理,当市被选中时,三级(区)也会随之更新,形成联动效果。 "Cascade_Master"组件的实现原理主要包括以下几个关键点: ...

    Android 横向选择器(HorizontalPickerView.java)

    自定义Android 横向选择器

    Android城市切换选择列表

    本项目“Android城市切换选择列表”旨在提供一个高效、用户友好的解决方案,实现类似手机联系人界面的首字母查询和排序功能。 首先,这个功能的核心是数据结构的设计。在Android中,城市数据通常存储为SQLite数据库...

Global site tag (gtag.js) - Google Analytics