1

Я использую следующий, чтобы показать соответствующее изображение маркеров на основе возвращенного имени бизнеса с помощью 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, он по-прежнему показывает маркер по умолчанию. Я понятия не имею, почему он не показывает правильный значок маркера. Кроме того, если это помогает, мои значки маркеров - это векторные изображения.

+1

'map.put (" walmart ", R.drawable.ic_wm_poi); mIcon = map.get ("walmart"); if (mIcon! = null) {showIcon (mIcon)); ' –

+0

@ cricket_007 Отлично! Спасибо! Я дам эту попытку и посмотрю, решит ли это проблему. В будущем, возможно ли, что значок не показывался, потому что мое дерево if/else было слишком большим? –

+0

Эй, все еще не хватает [mcve]. Как вы называете эти функции? Где значение 'markerOptions'? –

ответ

0

думаю есть все хорошо. но ошибка, до сих пор я видел ваш код,

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

то, что вы хотите сделать это,

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

Надеется, что это помогает.

+0

Просто попробовал это. Он по-прежнему выходит из строя с помощью NullPointerException. Точка останова по-прежнему показывает, что mIcon возвращает как 0 –

+0

Какова была ошибка перед обновлением этого кода? можете ли вы опубликовать журнал ошибок – Noorul

+0

опубликовать этот метод. dataParser.parse (результат); – Noorul

0

U есть функция в отдельном классе попробовать этот

MarkerIcons.markerIcon(placeName)) 

или обновить меня, если ур проблема очищается.

0

После того, как мы ответили на вопросы, которые были заданы и пытались отладить мой код, чтобы найти ошибку, я нашел ошибку.

Для всех, у кого может быть такая же проблема с иконками маркера, которые не отображаются, путем проб и ошибок, я обнаружил, что вы не можете использовать векторные изображения, которые в формате xml, как ваши маркеры. Как только я переключил их все на png-файлы, каждый значок показывался без ошибок.

Надеюсь, этот ответ поможет кому-то еще в будущем. Спасибо всем за ваш вклад.