android 调用百度sdk后运行不了,解决android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题...

因为工作的需要,我在做软件的时候用到地图,并且需要从地图中搜索公交、商户等信息,因此选择百度地图。百度地图搜索的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();

for(int i = 0;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

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接收消息,将返回的数据写到界面里面就行了。

我的代码直接是不能运行的,主要跟大家说一下我的思路。

如果你有更好的方法,欢迎交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值