Я использую следующий, чтобы показать соответствующее изображение маркеров на основе возвращенного имени бизнеса с помощью Google Места и карт:Ошибки маркера на основе возвращенного имени бизнеса в Android
if (name.contains("walmart")) {
mIcon = R.drawable.ic_wm_poi;
} if (name.contains("speedco")) {
mIcon = R.drawable.ic_poi_speedco;
}
LogCat показывает «Unkown значок : business name ", которое соответствует одному из моих операторов if, но не отображает соответствующий значок. Я пробовал использовать if/else и switch. Я также попробовал name.contains, name.equals и name.contentEquals. Например, если я ищу «Walmart», ответ возвращает название компании «Walmart», как показано в логарифме, и маркер показывает имя «Walmart» после щелчка, но соответствующий значок не отображается. Я устанавливаю значок маркеров следующим образом:
markerOptions.icon(BitmapDescriptorFactory.fromResource(markerIcon(placeName)));
EDIT После внедрения комментария сверчков, иконки для различных мест до сих пор не показывают. Это то, что у меня есть:
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;
}
}
}
Как я называю эти функции:
Получить место Класс
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));
}
}
}
EDIT 2
После установки точек останова для markerIcon
метод и линия, которая вызывает markerIcon
me thod, журнал отладки показывает, что возвращаемая строка ответа на самом деле является «Walmart». Который соответствует значению key
в HashMap. Возвращенный значок для маркера возвращается как «0». Он не возвращает «значение» из хэш-карты. Я устанавливаю значок маркера, используя следующую строку:
mIcon = getpoiIcons().get(name).intValue();
Учитывая варианты, я предположил, что получение согласования «ключ» (в этом случае строка «имя») вернет его ИНТ «значение» , Я что-то упускаю?
Несмотря на то, что лог-код показывает возвращенные бизнес-имена Walmart, Walmart Supercenter и Walmart Neighborhood Market, он по-прежнему показывает маркер по умолчанию. Я понятия не имею, почему он не показывает правильный значок маркера. Кроме того, если это помогает, мои значки маркеров - это векторные изображения.
'map.put (" walmart ", R.drawable.ic_wm_poi); mIcon = map.get ("walmart"); if (mIcon! = null) {showIcon (mIcon)); ' –
@ cricket_007 Отлично! Спасибо! Я дам эту попытку и посмотрю, решит ли это проблему. В будущем, возможно ли, что значок не показывался, потому что мое дерево if/else было слишком большим? –
Эй, все еще не хватает [mcve]. Как вы называете эти функции? Где значение 'markerOptions'? –