DevStore首页 > DEV资源 > 源码下载 > 源码详情

查询城市(可根据汉字、拼音和首字母查询)

 
猫猫熊 | 2014-12-23 18:12    浏览量(6127)    评论(8)    收藏(9)
功能分类:工具 支持平台:Android 运行环境:Eclipse
开发语言:Java 开发工具:Eclipse 源码大小:2.12MB
下载源码 713 人下载

源码简介

可查询中国所有城市信息,并且支持全称、拼音及首字母模糊查询
注:第一次运行会进行数据库初始化操作,需要等待2-4分钟。再次运行则不需要等待。如果不想等待可以直接将压缩包中的city_info数据库文件拷贝到手机中的data/data/com.example.searchcity/databases/文件夹中
再注:程序会获取城市名称对应的拼音信息,需要导入jar包实现:pinyin4j。压缩包中已经放入了一个Jar包,包括文档。

源码截图

  • 按名称查询
  • 按首字母查询
  • 按拼音查询
DevStore所有源码来自用户上传分享,版权问题及牵扯到商业纠纷均与DevStore无关。

源码片段

/**获取外部数据库中的城市列表,并将其存入新表中(如果有服务端支持,应该将获取城市计算拼音的逻辑放入服务端,并提供获取城市列表及对应拼音的接口)*/
	private void initCityList(){
		cityDao = new CityDao(this);
		if(cityDao.cityIsExists()){   //初始化只进行一次,可通过判断数据库中是否有数据,也可通过SharedPreferences实现
			return;
		}
		waitDialog = new AlertDialog.Builder(this).setTitle("提醒").setIcon(android.R.drawable.ic_dialog_alert)
				.setMessage("正在加载数据,请稍后\n初次加载比较耗时,需要2-4分钟左右。再次启动就不会有任何问题。请亲耐心等待哦").setCancelable(false).create();
		waitDialog.show();
		final Handler handler = new Handler(){
			public void handleMessage(android.os.Message msg) {
				//数据加载完成后关闭对话框
				if(msg.what == MESSAGE_CITY_LOADED){
					waitDialog.cancel();
				}
			};
		};
		//初次加载比较耗时,所以需要新启动线程完成加载,并通过对话框告知用户。这段逻辑最好放到服务端,这里只是为了实现功能
		new Thread(){
			public void run() {
				pyUtil = new PinYinUtil();
				
				String dbFileName = "weather_info";
				File file = new File("data/data/"+getPackageName()+"/databases/"+dbFileName); 
				try {
					//从外部资源文件夹中获取城市数据库,并将其保存到数据库文件夹中
					StreamUtil.getInputStream(getAssets().open(dbFileName), new FileOutputStream(file));  //将外部资源中的数据库文件拷贝到数据库文件夹中
					SQLiteDatabase db = openOrCreateDatabase(dbFileName, Context.MODE_PRIVATE, null);
					Cursor c = db.query("city_info", new String[]{"_id","city_name"}, null, null, null, null, null);
					if(c!=null){
						//查询外部数据库中的城市数据,并在新构建的数据库中将原始数据和对应的拼音/首字母也保存到数据库中,待后续查询使用
						while(c.moveToNext()){
							int id = c.getInt(c.getColumnIndex("_id"));  //获取id
							String cityName = c.getString(c.getColumnIndex("city_name"));  //获取城市名称
							citys.add(new CityEntity(id, cityName, pyUtil.getStringPinYin(cityName), pyUtil.getFirstSpell(cityName)));  //pyutil是汉字与拼音转化的工具类,需要引入Jar包:pinyin4j
						}
						c.close();
					}
					db.close();
					cityDao.addCity(citys);
					citys.clear();
					handler.sendEmptyMessage(MESSAGE_CITY_LOADED);
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			};
		}.start();
		
	}
	
	private SearchView sv;
	private ListView lv;
	
	private void initView(){
		sv = (SearchView)findViewById(R.id.searchview);
		lv = (ListView)findViewById(R.id.listview);
	}
	
	private ArrayAdapter cityAdapter;
	
	private void setAdapter(){
		cityAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, citys);
		lv.setAdapter(cityAdapter);
	}
	
	private void addListener(){
		
		//为搜索框添加搜索文字的监听器
		sv.setOnQueryTextListener(new OnQueryTextListener() {
			
			//当用户点击提交时执行
			@Override
			public boolean onQueryTextSubmit(String query) {
				
				return true;
			}
			
			//当用户输入文字改变时执行
			@Override
			public boolean onQueryTextChange(String newText) {
				if(newText == null || newText.length() == 0){
					update(null);  //如果用户删除了搜索内容,Listview中的内容也应该清空
				}else{
					ArrayList newCitys = cityDao.getCitysForName(newText);
					update(newCitys);
				}
				return true;
			}
		});
		
		lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView parent, View view,
					int position, long id) {
				Toast.makeText(MainActivity.this, "您已经选中:"+citys.get(position).getCityName(), Toast.LENGTH_SHORT).show();
			}
			
		});
	}
	
	/**该方法用来更新adapter中的内容,并刷新界面*/
	private void update(ArrayList newCitys){
		citys.clear();
		if(newCitys != null && newCitys.size() != 0){
			citys.addAll(newCitys);
		}
		cityAdapter.notifyDataSetChanged();
	}
  •   赞(0) 赞 +1 赞(0) 已赞
  •   收藏(9) 收藏 +1 已收藏 取消
  •   下载(713)
评论(8)
82838912

82838912 2015-01-15 09:17:02

学习了,非常值得学习。谢谢。
回复(0) 赞(0) 赞(1)
后生

后生 2014-12-26 10:26:28

不错,对自己很有用处
回复(0) 赞(0) 赞(1)
yqy19891013

yqy19891013 2014-12-25 23:31:25

不错,对自己很有用处
回复(0) 赞(0) 赞(1)
小小兄

小小兄 2014-12-24 11:16:22

这个很实用的感觉
回复(0) 赞(0) 赞(1)
cainiaogege

cainiaogege 2014-12-24 10:43:17

不错不错 可以用到了 谢谢楼主!
回复(0) 赞(1) 赞(2)
  • 推荐
  • 审核
  • 收录
  • 获取活力值

源码上传作者

  • 14 能力值
  • 6 源码
  • 0 评测
  • 0 资料
擅长: 解析 xml 扫雷

热门源码