android中google“定位查询”
16lz
2021-01-26
阅读更多 “定位查询”locate()方法,增加一个线程,在该线程中处理查询地点的功能,请参考代码清单16-10,完整代码请参考chapter16_7工程中src/com/work/map/MyMapActivity.java文件locate()方法代码部分。
【代码清单16-10】
通过下面的代码是实现显示进度条:
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()方法关闭进度条对话框,否则进度条对话框不会关闭。
出自《Android开发案例驱动教程》第十六章
【代码清单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) {Listoverlayitems = 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开发案例驱动教程》第十六章
更多相关文章
- Android(安卓)Support Percent百分比布局
- 获取Android(安卓)ics源码
- FlexboxLayout实现流式布局
- Android(安卓)非UI线程使用View.post()方法一处潜在的内存泄漏
- Android(安卓)注解
- android 数据存储——SharedPreferences,有代码实现,简单易懂
- Android(安卓)KitKat 4.4 使用Chrome DevTools 进行WebView远程
- Android(安卓)AsyncTask和Handler对比
- 技能积累