检索其实就是查询,比如你要找一个地方的美食,就可以通过输入城市和美食的关键字来查询!这一功能官方介绍的很多,我们主要看看检索城市的美食,并通过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);
}
}