“定位查询”locate()方法,增加一个线程,在该线程中处理查询地点的功能,请参考代码清单16-10,完整代码请参考chapter16_7工程中src/com/work/map/MyMapActivity.java文件locate()方法代码部分。

【代码清单16-1】

/** * 定位查询 */private void locate() {          LayoutInflater factory= LayoutInflater.from(MyMapActivity.this);         View locationView =factory.inflate(R.layout.find_dialog, null);         final EditTextfindText = (EditText) locationView                           .findViewById(R.id.dailog_find);         newAlertDialog.Builder(this).setTitle(R.string.dialog_find).setView(                           locationView).setPositiveButton(R.string.button_ok,                           newDialogInterface.OnClickListener() {                                    public void onClick(DialogInterfacedialog, int whichButton) {                                             findString= findText.getText().toString();                                             progDialog =ProgressDialog.show(MyMapActivity.this,                                                               "处理中...", "定位" +findString, true, false);                                             new Thread() {                                                      @Override                                                      publicvoid run() {                                                               try{                                                                        Geocoder geocoder = new Geocoder(                                                                                          MyMapActivity.this);                                                                        addresses =geocoder.getFromLocationName(                                                                                          findString, 1);                                                                         if (addresses.size() > 0) {                                                               List<OverlayItem>overlayitems = new ArrayList<OverlayItem>();                                                                                 doublelat = addresses.get(0)                                                                                                   .getLatitude();                                                                                 doublelng = addresses.get(0)                                                                                                   .getLongitude();                                                                                 //设定中心点                                                                                 centerPoit= new GeoPoint(                                                                                                   (int)(lat * 1E6),                                                                                                   (int)(lng * 1E6)); // 地理坐标                                                                                 mc.setCenter(centerPoit);                                                                                 Log.i(TAG," lat " + lat + "  lng"                                                                                                   +lng);                                                                                 intintMaxAddressLineIndex = addresses                                                                                                   .get(0)                                                                                                   .getMaxAddressLineIndex();                                                                                 Stringaddress = "地址:";                                                                                 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);                                                                                 }                                                                                 Stringtitle = "";                                                                                 if(addresses.get(0).getFeatureName() == null) {                                                                                          title = "";                                                                                 }else {                                                                                          title = addresses.get(0)                                                                                                            .getFeatureName();                                                                                 }                                                                                 overlayitems.add(newOverlayItem(                                                                                                   centerPoit,title, address));                                                                                  Drawablemarker = 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,                           newDialogInterface.OnClickListener() {                                     public void onClick(DialogInterfacedialog, 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() {          @Override         public voidhandleMessage(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. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. android CountDownTimer
  3. Android(安卓)AsyncTask源码解析
  4. Android(安卓)JS交互与JS代码注入--详解
  5. [转]Android(安卓)Test Auto Test Mu…
  6. 在Eclipse中查看android 源代码的方法!
  7. 录音函数网络对讲机C#服务器 Android客户端(二) C#服务器代码分析
  8. 代码方法android全屏显示
  9. android对文件的MD5验证

随机推荐

  1. android APT 切换 annotationProcessor使
  2. Android(安卓)Http访问网络 学习(慕课网学
  3. Qt for android 开机自启动、开机黑屏处
  4. android显示单位
  5. Android工程中javax annotation Nullable
  6. Android(安卓)adapter has changed解决方
  7. 关于Ant编译Android中Ant学习研究
  8. android 内存占用 分析工具
  9. Android(安卓)短信模块分析(八) MMS数据
  10. android opengl es 纹理贴图资料