深入学习百度地图Android SDK v4.0.0【第九关】检索功能

检索其实就是查询,比如你要找一个地方的美食,就可以通过输入城市和美食的关键字来查询!这一功能官方介绍的很多,我们主要看看检索城市的美食,并通过UID去检索美食详情信息!

package cq.cake.chwl.ui;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import cq.cake.adapter.POIUidAdapter;
import cq.cake.base.BaseToolbarMapActivity;
import cq.cake.chwl.R;
import cq.cake.util.L;
import cq.cake.util.T;

/**
 * POI检索功能
 * 自v3.6.1开始,城市poi检索返回结果,新增门址类列表数据:
 * PoiSearch类的searchInCity(PoiCitySearchOption) 发起检索时返回的结果,增加门址类数据:
 * PoiResult中新增getAllAddr()获取门址类列表,当isHasAddrInfo() 返回true时,除了原poi列表外,还包含门址结果
 * 例如:在“北京”搜索“上地十街1号”,除返回包含“上地十街1号”的poi列表以外,还包括地址为“上地十街1号”的明确门址。
 */
public class PoiSearchActivity extends BaseToolbarMapActivity {
    PoiSearch mPoiSearch;
    @BindView(R.id.searchview)
    EditText searchview;
    @BindView(R.id.searchview2)
    EditText searchview2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_poi_search);
        ButterKnife.bind(this);
        initPOI();

    }

    private void initPOI() {
        //1.创建检索实例
        mPoiSearch = PoiSearch.newInstance();
        //2.创建监听者,官网只有前两个方法,但到了4.0是有室内地图的检索结果的
        OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {
            @Override
            public void onGetPoiResult(PoiResult result) {
                //获取POI检索结果
                L.i("检索结果总数=" + result.getTotalPoiNum() + "  Poi检索结果数:" + result.getAllPoi().size());
                final List<PoiInfo> allPoi = result.getAllPoi();


                POIUidAdapter adapter = new POIUidAdapter(PoiSearchActivity.this, allPoi);
                new AlertDialog.Builder(PoiSearchActivity.this).setAdapter(adapter, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        PoiInfo poi = allPoi.get(which);
                        //更具得到的uid,来检索详情信息
                        mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(poi.uid));
                    }
                }).show();
            }

            @Override
            public void onGetPoiDetailResult(PoiDetailResult result) {
                //获取Place详情页检索结果
                if (result.error != SearchResult.ERRORNO.NO_ERROR) {
                    //详情检索失败
                    T.showLong(PoiSearchActivity.this, "详情检索失败");
                } else {

                    StringBuffer buffer = new StringBuffer("名称:" + result.getName() + "\n");
                    buffer.append("地址:").append(result.getAddress()).append("\n")
                            .append("签到数量:").append(result.getCheckinNum()).append("\n")
                            .append("评论数量:").append(result.getCommentNum()).append("\n")
                            .append("详情 url:").append(result.getDetailUrl()).append("\n")
                            .append("环境评价:").append(result.getEnvironmentRating()).append("\n")
                            .append("设施评价:").append(result.getFacilityRating()).append("\n")
                            .append("喜欢数量:").append(result.getFavoriteNum()).append("\n")
                            .append("团购数量:").append(result.getGrouponNum()).append("\n")
                            .append("卫生评价:").append(result.getHygieneRating()).append("\n")
                            .append("营业时间:").append(result.getShopHours()).append("\n")
                            .append("poi 标签:").append(result.getTag()).append("\n")
                            .append("电话号码:").append(result.getTelephone()).append("\n")
                            .append("poi 类型:").append(result.getType()).append("\n")
                            .append("poi的uid:").append(result.getUid()).append("\n");
                    //检索成功
                    new AlertDialog.Builder(PoiSearchActivity.this).setTitle("检索详情").setMessage(buffer.toString()).setPositiveButton("确定", null).show();
                }
            }

            @Override
            public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
                //获取室内详情页检索结果
            }
        };
        //3.设置监听者
        mPoiSearch.setOnGetPoiSearchResultListener(poiListener);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //5.释放POI检索实例
        mPoiSearch.destroy();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_poi_search, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId) {
            case R.id.menu1:
                //4.发起检索请求
                mPoiSearch.searchInCity((new PoiCitySearchOption())
                        .city(searchview.getText().toString())
                        .keyword(searchview2.getText().toString())
                        .pageNum(10));
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值