在Android中根据返回的企业名称设置映射标记时出错

在Android中根据返回的企业名称设置映射标记时出错,android,google-maps-markers,google-maps-android-api-2,Android,Google Maps Markers,Google Maps Android Api 2,我使用以下内容显示基于使用Google Places和Maps返回的企业名称的相应标记图像: if (name.contains("walmart")) { mIcon = R.drawable.ic_wm_poi; } if (name.contains("speedco")) { mIcon = R.drawable.ic_poi_speedco; } logcat显示“unknown icon:business name”,它与我的一条if语句相对应,但不显示相

我使用以下内容显示基于使用Google Places和Maps返回的企业名称的相应标记图像:

    if (name.contains("walmart")) {
    mIcon = R.drawable.ic_wm_poi;
} if (name.contains("speedco")) {
    mIcon = R.drawable.ic_poi_speedco;
} 
logcat显示“unknown icon:business name”,它与我的一条if语句相对应,但不显示相应的图标。我尝试过使用if/else和switch语句。我还尝试了name.contains、name.equals和name.contentEquals。例如,如果我搜索“Walmart”,响应返回logcat中显示的企业名称“Walmart”,单击后标记显示名称“Walmart”,但相应的图标不显示。我正在设置标记图标,如下所示:

markerOptions.icon(BitmapDescriptorFactory.fromResource(markerIcon(placeName))

编辑 在执行crickets的评论后,各个位置的图标仍然不显示。这就是我所拥有的:

    public class MarkerIcons {

    public static HashMap<String, Integer> poiIcons;

    public static HashMap<String, Integer> getpoiIcons(){
        poiIcons = new HashMap<>();
        poiIcons.put("Walmart", R.drawable.ic_wm_poi);
        poiIcons.put("Walmart Supercenter", R.drawable.ic_wm_poi);
        poiIcons.put("Walmart Neighborhood Market", R.drawable.ic_wm_poi);

        return poiIcons;
    }

    public static Integer markerIcon(String name){
        String TAG_MI = "marker";
        Log.d(TAG_MI, "Loc Name: " + name);
        int mIcon = 0;
        if(getpoiIcons().containsKey(name)){
            mIcon = getpoiIcons().get(name).intValue();
            return mIcon;
        }else{
            mIcon = R.drawable.default_marker;
            return mIcon;
        }
    }

}
公共类标记{
公共静态HashMap图标;
公共静态HashMap getpoicons(){
POICONS=新HashMap();
POICONS.put(“沃尔玛”,R.drawable.ic\U wm\U poi);
POICONS.put(“沃尔玛超级中心”,R.drawable.ic\U wm\U poi);
POICONS.put(“沃尔玛街坊市场”,R.drawable.ic_wm_poi);
返回图标;
}
公共静态整数标记(字符串名称){
String TAG_MI=“marker”;
日志d(标记“位置名称:”+名称);
int-mIcon=0;
if(getpoicons().containsKey(名称)){
mIcon=getpoicons().get(name).intValue();
返回mIcon;
}否则{
mIcon=R.drawable.default\u标记;
返回mIcon;
}
}
}
我如何调用这些函数:

获得位置类

    public class GetNearbyBusinessData extends AsyncTask<Object, String, String> {

    private String TAG = "getplace";

    private String googlePlacesData;
    private GoogleMap mMap;
    private String url;

    @Override
    protected String doInBackground(Object... params) {
        try {
            Log.d(TAG, "doInBackground entered");
            mMap = (GoogleMap) params[0];
            url = (String) params[1];
            DownloadUrl downloadUrl = new DownloadUrl();
            googlePlacesData = downloadUrl.readUrl(url);
            Log.d(TAG, "doInBackground Exit");
        } catch (Exception e) {
            Log.d(TAG, e.toString());
        }
        return googlePlacesData;
    }

    @Override
    protected void onPostExecute(String result) {
        Log.d(TAG, "onPostExecute Entered");
        List<HashMap<String, String>> nearbyPlacesList;
        DataParser dataParser = new DataParser();
        nearbyPlacesList =  dataParser.parse(result);
        ShowNearbyBusiness(nearbyPlacesList);
        Log.d(TAG, "onPostExecute Exit");
        Log.d(TAG, result);
    }

    private void ShowNearbyBusiness(List<HashMap<String, String>> nearbyPlacesList) {
        for (int i = 0; i < nearbyPlacesList.size(); i++) {
            Log.d(TAG,"Entered into showing business");
            MarkerOptions markerOptions = new MarkerOptions();
            HashMap<String, String> googlePlace = nearbyPlacesList.get(i);
            double lat = Double.parseDouble(googlePlace.get("lat"));
            double lng = Double.parseDouble(googlePlace.get("lng"));
            String placeName = googlePlace.get("place_name");
            String vicinity = googlePlace.get("vicinity");
            LatLng latLng = new LatLng(lat, lng);
            markerOptions.position(latLng);
            markerOptions.title(placeName + "-" + vicinity);
            markerOptions.icon(BitmapDescriptorFactory.fromResource(markerIcon(placeName)));
            mMap.addMarker(markerOptions);
            //move map camera
            mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
            mMap.animateCamera(CameraUpdateFactory.zoomTo(11));
        }
    }

}
公共类GetNearbyBusinessData扩展异步任务{
私有字符串TAG=“getplace”;
私有字符串googlePlacesData;
私有谷歌地图;
私有字符串url;
@凌驾
受保护的字符串doInBackground(对象…参数){
试一试{
Log.d(标记“输入了doInBackground”);
mMap=(谷歌地图)参数[0];
url=(字符串)参数[1];
DownloadUrl DownloadUrl=新的DownloadUrl();
googlePlacesData=downloadUrl.readUrl(url);
日志d(标签“doInBackground出口”);
}捕获(例外e){
Log.d(标记,例如toString());
}
返回googlePlacesData;
}
@凌驾
受保护的void onPostExecute(字符串结果){
Log.d(标记“onPostExecute Entered”);
位置列表附近的列表;
DataParser DataParser=新的DataParser();
nearbyPlacesList=dataParser.parse(结果);
近距离展示业务(近距离地点列表);
Log.d(标记“onPostExecute Exit”);
Log.d(标签、结果);
}
私人作废显示业务附近(位置附近列表列表){
for(int i=0;i
编辑2

markerIcon
方法和调用
markerIcon
方法的行设置断点后,调试日志显示返回的响应字符串实际上是“Walmart”。它与HashMap中的
值匹配。但返回的标记图标将返回为“0”。它没有从哈希映射返回“值”。我正在使用以下行设置标记图标:

mIcon=getpoicons().get(name).intValue()

考虑到可用的选项,我假设获取匹配的“key”(在本例中为字符串“name”)将返回其int“value”。我错过什么了吗


即使logcat显示返回的沃尔玛、沃尔玛超级中心和沃尔玛邻里市场的企业名称,它仍然显示默认标记。我不知道为什么它没有显示正确的标记图标。此外,如果有帮助的话,我的标记图标是矢量图像。

我认为每件事都很好。但错误是,到目前为止我看到你的代码是

 markerOptions.icon(BitmapDescriptorFactory.fromResource(markerIcon(placeName)));
你想做的是

 BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(markerIcon(placeName)));
 markerOptions.icon(icon);

希望有帮助。

我觉得每件事都很好。但错误是,到目前为止我看到你的代码是

 markerOptions.icon(BitmapDescriptorFactory.fromResource(markerIcon(placeName)));
你想做的是

 BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(markerIcon(placeName)));
 markerOptions.icon(icon);

希望有帮助。

你在单独的类中有函数,试试这个

MarkerIcons.markerIcon(placeName))

如果您的问题已解决,请更新我。

您在单独的类中有函数,请尝试此操作

MarkerIcons.markerIcon(placeName))

如果您的问题已解决,请更新我。

在尝试给出的答案并尝试调试代码以查找错误后,我发现了错误

对于可能有相同问题的其他人,通过反复试验,我发现不能使用xml格式的矢量图像作为标记。一旦我把它们全部切换到png文件,每个图标都会毫无瑕疵地显示出来


希望这个答案在将来对其他人有所帮助。感谢大家的贡献。

在尝试给出的答案并尝试调试代码以找出错误后,我发现了错误

对于任何其他可能有相同问题的t