解决Android中调用百度地图MKSearchListener接口回调方法不执行的问题

原文地址:http://www.iyezhou.com/2013/08/android-mksearchlistener-problem/

作者: 一叶孤舟

在百度地图API的Android SDK开发中,搜索poi发现百度地图有时无法返回搜索数据。经过调试发现百度地图搜索MKSearchListener接口的回调函数未执行。

其中的原因还是初学者程序设计问题,在百度地图初始化后就直接使用MKSearch,而此时在网络不通畅的情况下,地图数据可能还没获取到。因此在BMapManager刚初始化、MapVIEW刚开始启动的时候,百度地图MKSearchListener接口的回调方法没有能够运行。

况且在实际操作中,人们也不可能一打开地图就立即执行搜索。一般都是等地图展现出来之后,再通过输入关键字进行搜索,所以从初始化到执行搜素的过程并不是”同步进行”的。

解决方法一:延时

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    
    //注意:请在使用setContentView前初始化BMapManager对象,否则会报错
    mMapManager = new BMapManager(getApplication());
    mMapManager.init("94547140f15a8c70cc7fdb4297703982", null);
    
    setContentView(R.layout.search);
    
    mMapView = (MapView) this.findViewById(R.id.bmapsView);
    //设置启用内置的缩放控件
    mMapView.setBuiltInZoomControls(true);
    //得到mMapView的控制权,可以用它控制和驱动平移和缩放
    mMapController = mMapView.getController();
    //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
    GeoPoint point = new GeoPoint((int)(39.915*1E6), (int)(116.404*1E6));
    //设置地图中心点
    mMapController.setCenter(point);
    //设置地图zoom级别
    mMapController.setZoom(12);
    
    try
    {
        Thread.sleep(10000);
    } catch (InterruptedException e)
    {
        e.printStackTrace();
    }
    
    mSearch = new MKSearch();
    mSearch.init(mMapManager, new MySearchListener());
    
    //北京西站
    GeoPoint ptLB = new GeoPoint((int)(39.901375 * 1E6), (int)(116.329099 * 1E6));
    //北京北站
    GeoPoint ptRT = new GeoPoint((int)(39.949404 * 1E6), (int)(116.360719 * 1E6));
    mSearch.poiSearchInbounds("KFC", ptLB, ptRT);
}

解决方法二:添加一个Button控件,在其点击事件响应中执行搜索操作

mBtnSearch = (Button) this.findViewById(R.id.btn_search);
mBtnSearch.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        mSearch = new MKSearch();
        //注意,MKSearchListener只支持一个,以最后一次设置为准
        mSearch.init(mMapManager, new MySearchListener());
        
        GeoPoint ptLB = new GeoPoint((int)(39.901375 * 1E6), (int)(116.329099 * 1E6));
        //北京北站
        GeoPoint ptRT = new GeoPoint((int)(39.949404 * 1E6), (int)(116.360719 * 1E6));
        mSearch.poiSearchInbounds("KFC", ptLB, ptRT);
    }
});



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值