阅读更多 “定位查询”locate()方法,增加一个线程,在该线程中处理查询地点的功能,请参考代码清单16-10,完整代码请参考chapter16_7工程中src/com/work/map/MyMapActivity.java文件locate()方法代码部分。
【代码清单16-10】
/** * 定位查询 */private void locate() {LayoutInflater factory = LayoutInflater.from(MyMapActivity.this);View locationView = factory.inflate(R.layout.find_dialog, null);final EditText findText = (EditText) locationView.findViewById(R.id.dailog_find);new AlertDialog.Builder(this).setTitle(R.string.dialog_find).setView(locationView).setPositiveButton(R.string.button_ok,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {findString = findText.getText().toString();progDialog = ProgressDialog.show(MyMapActivity.this,"处理中...", "定位" + findString, true, false);new Thread() {@Overridepublic void run() {try {Geocoder geocoder = new Geocoder(MyMapActivity.this);addresses = geocoder.getFromLocationName(findString, 1);if (addresses.size() > 0) {List overlayitems = new ArrayList();double lat = addresses.get(0).getLatitude();double lng = addresses.get(0).getLongitude();// 设定中心点centerPoit = new GeoPoint((int) (lat * 1E6),(int) (lng * 1E6)); // 地理坐标mc.setCenter(centerPoit);Log.i(TAG, " lat " + lat + "  lng "+ lng);int intMaxAddressLineIndex = addresses.get(0).getMaxAddressLineIndex();String address = "地址:";for (int j = 0; j <= intMaxAddressLineIndex; j++) {if (addresses.get(0) == null)continue;address += addresses.get(0).getAddressLine(j)+ ",";}if (address.endsWith(",")) {address = address.substring(0,address.length() - 1);}String title = "";if (addresses.get(0).getFeatureName() == null) {title = "";} else {title = addresses.get(0).getFeatureName();}overlayitems.add(new OverlayItem(centerPoit, title, address));Drawable marker = getResources().getDrawable(R.drawable.markermap2);locs = new LocationItemsOverlay(marker,overlayitems);handler.sendEmptyMessage(0);} else {handler.sendEmptyMessage(1);}} catch (Exception e) {e.printStackTrace();handler.sendEmptyMessage(1);}}}.start();}}).setNegativeButton(R.string.button_cancel,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {}}).show();}

通过下面的代码是实现显示进度条:
progDialog = ProgressDialog.show(MyMapActivity.this,  "处理中...", "定位" + findString, true, false);
启动一个子线程,在该线程中实现地点查询,但是不能有更新UI的处理,如果查询成功调用handler.sendEmptyMessage(0),如果失败调用handler.sendEmptyMessage(1)。
new Thread() {
@Override
public void run() {
… …
}
}.start();
在Hander的handleMessage方法中处理更新UI操作,其中成功(case 0)时候清除屏幕上原来的图层,重新添加图层,最后progDialog.dismiss()方法关闭进度条对话框。如果是查询失败(case 1)弹出Toast说明一下,也要通过progDialog.dismiss()方法关闭进度条对话框,否则进度条对话框不会关闭。
private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 0:mapView.getOverlays().clear();mapView.getOverlays().add(locs);progDialog.dismiss();break;case 1:Toast.makeText(MyMapActivity.this, "暂时无法" + findString + "信息。",Toast.LENGTH_SHORT).show();progDialog.dismiss();}}};


                                          出自《Android开发案例驱动教程》第十六章

更多相关文章

  1. Android(安卓)Support Percent百分比布局
  2. 获取Android(安卓)ics源码
  3. FlexboxLayout实现流式布局
  4. Android(安卓)非UI线程使用View.post()方法一处潜在的内存泄漏
  5. Android(安卓)注解
  6. android 数据存储——SharedPreferences,有代码实现,简单易懂
  7. Android(安卓)KitKat 4.4 使用Chrome DevTools 进行WebView远程
  8. Android(安卓)AsyncTask和Handler对比
  9. 技能积累

随机推荐

  1. 编译Android donut
  2. Android(安卓)的布局优化
  3. 详解Android系统中的root权限获得原理
  4. android:windowSoftInputMode用法
  5. scrollview中使用recyclerview莫名自动上
  6. Android学习笔记之mainfest文件中android
  7. 在Ubuntu上下载、编译和安装Android最新
  8. android 实现qq聊天对话界面效果
  9. Android虚拟键盘挡住输入组件的解决办法
  10. android socket 配置文件