职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 431|回复: 1

android中google“定位查询”

[复制链接]
钰云 发表于 2011-8-27 11:04 | 显示全部楼层 |阅读模式
“定位查询”loca......
推荐链接 20-30......


“定位查询”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() {
@Override
public void run() {
try {
Geocoder geocoder = new Geocoder(
MyMapActivity.this);
addresses = geocoder.getFromLocationName(
findString, 1);

if (addresses.size() > 0) {
List<OverlayItem> overlayitems = new ArrayList<OverlayItem>();
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() {

@Override
public 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开发案例驱动教程》第十六章

曾经的小孩 发表于 2011-8-27 11:04 | 显示全部楼层
推荐链接
20-30万急聘多名天才Java/MTA软件工程师
见证又一个准百万富翁的诞生!
3G培训就业月薪平均7K+,不3K就业不花一分钱!


您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-7 09:30 , Processed in 0.119399 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表