解决android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题
2013-01-28 13:08
816 查看
因为工作的需要,我在做软件的时候用到地图,并且需要从地图中搜索公交、商户等信息,因此选择百度地图。百度地图搜索的poi搜索正好符合我的需求,但是软件完成后发现在软件第一次执行的时候总是出错,百度地图无法返回搜索数据。
经过调试发现百度地图搜索的回调函数未执行,从网上搜索也没有找到结果。
最后试了几种方法总算给做出了了。
首先讲下百度地图的执行吧。
我们的Activity需要继承百度的MapActivity,
在oncreate中初始化。
mapMgr = new BMapManager(this.getApplication()); //新建一个地图管理器
mapMgr.init("百度地图mapkey", null);
super.initMapActivity(mapMgr);
//获取mapView
mv = (MapView) this.findViewById(R.id.bmapsView);
mapCtrl = mv.getController(); //取得mapView的控制
GeoPoint point = new GeoPoint((int)(31.760765*1E6), (int)(117.257397*1E6));
mapCtrl.setCenter(point); //设置地图显示中心点
mapCtrl.setZoom(16); //设置放大等级
然后的直接在百度地图中使用mksearch,我的是失败了。
我便新开了一个线程,在线程中等待一秒钟之后才开始执行百度地图的搜索。感觉可能是因为activity刚开始启动的时候,百度地图的那个方法没有能够运行,所以等待一秒再让其运行。
new Thread(new Runnable() {
@Override
public void run() {
mkSearch = new MKSearch();
MKSearchListener searchListener = new MKSearchListener() {
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetRGCShareUrlResult(String arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetPoiResult(MKPoiResult res, int type, int iError) {
Log.i("maa","调用我吧");
poiInfos = res.getAllPoi();
if(res != null){
jiaotonglist = new ArrayList<Jiaotong>();
for(int i = 0;i<poiInfos.size();i++){
MKPoiInfo poi = poiInfos.get(i);
String s = poi.name+":"+poi.address;
GeoPoint pt = poi.pt;
int size = s.length();
int x = (int)size/16;
String s1 = "";
String s2 = "";
if(x>0){
for(int j= 0;j<x;j++){
s1 = s.substring(j*16, (j+1)*16);
s2 = s2+s1+"\n";
}
s2 = s2 +s.substring(x*16);
s = s2;
}
Jiaotong jt = new Jiaotong(sxarray[i],s,R.drawable.suolue,pt);
jiaotonglist.add(jt);
}
handler.sendEmptyMessage(1);
//lv.requestFocus();
//lv.requestFocus( View.FOCUS_DOWN);
//刷新地图
Log.i("maa","成功加载:"+searchType);
}
Log.i("maa","已经加载:"+searchType);
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
}
};
mkSearch.init(mapMgr, searchListener);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
GeoPoint p = new GeoPoint((int)(31.760765*1E6), (int)(117.257397*1E6));
mkSearch.poiSearchNearBy("公交车站", p, 5000);
}
}).start();
然后使用hanlder接收消息,将返回的数据写到界面里面就行了。
我的代码直接是不能运行的,主要跟大家说一下我的思路。
如果你有更好的方法,欢迎交流。
经过调试发现百度地图搜索的回调函数未执行,从网上搜索也没有找到结果。
最后试了几种方法总算给做出了了。
首先讲下百度地图的执行吧。
我们的Activity需要继承百度的MapActivity,
在oncreate中初始化。
mapMgr = new BMapManager(this.getApplication()); //新建一个地图管理器
mapMgr.init("百度地图mapkey", null);
super.initMapActivity(mapMgr);
//获取mapView
mv = (MapView) this.findViewById(R.id.bmapsView);
mapCtrl = mv.getController(); //取得mapView的控制
GeoPoint point = new GeoPoint((int)(31.760765*1E6), (int)(117.257397*1E6));
mapCtrl.setCenter(point); //设置地图显示中心点
mapCtrl.setZoom(16); //设置放大等级
然后的直接在百度地图中使用mksearch,我的是失败了。
我便新开了一个线程,在线程中等待一秒钟之后才开始执行百度地图的搜索。感觉可能是因为activity刚开始启动的时候,百度地图的那个方法没有能够运行,所以等待一秒再让其运行。
new Thread(new Runnable() {
@Override
public void run() {
mkSearch = new MKSearch();
MKSearchListener searchListener = new MKSearchListener() {
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetRGCShareUrlResult(String arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetPoiResult(MKPoiResult res, int type, int iError) {
Log.i("maa","调用我吧");
poiInfos = res.getAllPoi();
if(res != null){
jiaotonglist = new ArrayList<Jiaotong>();
for(int i = 0;i<poiInfos.size();i++){
MKPoiInfo poi = poiInfos.get(i);
String s = poi.name+":"+poi.address;
GeoPoint pt = poi.pt;
int size = s.length();
int x = (int)size/16;
String s1 = "";
String s2 = "";
if(x>0){
for(int j= 0;j<x;j++){
s1 = s.substring(j*16, (j+1)*16);
s2 = s2+s1+"\n";
}
s2 = s2 +s.substring(x*16);
s = s2;
}
Jiaotong jt = new Jiaotong(sxarray[i],s,R.drawable.suolue,pt);
jiaotonglist.add(jt);
}
handler.sendEmptyMessage(1);
//lv.requestFocus();
//lv.requestFocus( View.FOCUS_DOWN);
//刷新地图
Log.i("maa","成功加载:"+searchType);
}
Log.i("maa","已经加载:"+searchType);
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
}
};
mkSearch.init(mapMgr, searchListener);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
GeoPoint p = new GeoPoint((int)(31.760765*1E6), (int)(117.257397*1E6));
mkSearch.poiSearchNearBy("公交车站", p, 5000);
}
}).start();
然后使用hanlder接收消息,将返回的数据写到界面里面就行了。
我的代码直接是不能运行的,主要跟大家说一下我的思路。
如果你有更好的方法,欢迎交流。
相关文章推荐
- 解决android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题
- 解决Android中调用百度地图MKSearchListener接口回调方法不执行的问题
- android 调用系统相机或者系统相册功能时,onActivityResult方法不执行问题的解决过程
- 【ANDROID】Android 在oncreate() 方法中调用 findViewById 返回 null 问题的原因和解决方法
- android开发中遇到的问题解决之RelativeLayout执行measure(w,h)方法时,出现NullPointerException的异常情况
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!
- Golang Linux下面调用nohup启动程序无法返回问题,解决方法.
- ANDROID Recycleview notifyDataSetChanged()方法调用出现IllegalStateException 问题的解决
- windows命令行下随时随地调用csc编译器的方法(解决dos下编译.net程序找不到CSC的问题)
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!
- 解决存储过程执行快,但程序调用则执行慢的问题
- 在EXE程序中调用DLL文件后出现_CrtIsValidHeapPointer(pUserData)问题的解决方法
- 解决通过Intent调用系统拍照程序,返回图片太小的问题[android]
- 微信支付仅能成功调用一次问题的解决方法(Android)
- Android程序启动时出现黑屏问题的解决方法
- 在程序中执行 bat 文件的问题及解决方法
- Android开发中调用系统相册上传图片到服务器OPPO等部分手机上出现短暂的显示桌面问题的解决方法
- Android编程中调用Camera时预览画面有旋转问题的解决方法
- Android listview&gridview getview 方法多次调用问题解决方法 并附上单页加载实现问卷调查适配器源代码
- Eclipse下导出java程序可执行的jar包图片无法显示问题的一种解决方法