2014-09-26 2 views
1

Я работаю над учебником, и мое приложение в основном работает, за исключением одной маленькой детали. У меня есть меню «Опции», чтобы продемонстрировать такие вещи, как отображение карты в виде спутникового снимка, масштабирование в определенных местах и ​​т. Д.Android Google Maps setMyLocationEnabled (true)

Учебное пособие имеет два варианта меню, как показано ниже, которые эффективно должны использоваться в порядке, показанном для увеличения карту, на которой я сейчас нахожусь. Я хотел сделать первый элемент избыточным (getcurrentlocation), добавив в эту же функциональность второй элемент меню (show current loaction), но это приведет к сбою приложения.

Есть ли у кого-нибудь идеи, почему и как их преодолеть. Спасибо.

Фрагмент кода следует

case R.id.menu_getcurrentlocation: 
     // ---get your current location and display a blue dot--- 
     map.setMyLocationEnabled(true); 

     break; 

    case R.id.menu_showcurrentlocation: 
      // Adding the next line breaks the app. 
      // map.setMyLocationEnabled(true); 
     Location myLocation = map.getMyLocation(); 
     LatLng myLatLng = new LatLng(myLocation.getLatitude(),myLocation.getLongitude()); 


     CameraPosition myPosition = new CameraPosition.Builder().target(myLatLng).zoom(17).bearing(90).tilt(30).build(); 
     map.animateCamera(CameraUpdateFactory.newCameraPosition(myPosition)); 

     break; 
+1

Показать лог-код. – Piyush

+0

ОК, так что я изо всех сил пытался получить мой LogCat, добавленный к моему сообщению, но у меня есть обходное решение, которое работает, но не совсем разрешает мой вопрос о том, почему вызывать map.setMyLocationEnabled (true); в параметрах меню не работает. Моим обходным путем является изменение map.setMyLocationEnabled (true); сразу после того, как я позвонил getSupportFragmentManager. –

+0

Значит, ваше событие click menu не работает? вы получаете исключение нулевого указателя? – Piyush

ответ

3

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

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

if(map!=null){ 
map.setMyLocationEnabled(true); 
} 


if(map!=null){ 
    Location myLocation = map.getMyLocation(); 

    if(myLocation !=null){ 
    LatLng myLatLng = new LatLng(myLocation.getLatitude(), 
      myLocation.getLongitude()); 


    CameraPosition myPosition = new CameraPosition.Builder() 
      .target(myLatLng).zoom(17).bearing(90).tilt(30).build(); 
    map.animateCamera(CameraUpdateFactory.newCameraPosition(myPosition)); 
    } 
} 
1

от разработчиков док,

GoogleMap можно получить только с помощью GetMap(), когда основной карты система загружена и основной вид в фрагменте существует. Этот класс автоматически инициализирует систему карт и представление; однако вы не можете быть уверены, когда он будет готов, потому что это зависит от доступности APK сервисов Google Play. Если 0MGoogleMap недоступен, getMap() возвращает null.

  • Это может произойти, если фрагмент lifecyle не прошли через onCreateView (LayoutInflater, ViewGroup, Bundle) еще.
  • Это также может случиться, если службы Google Play недоступны.

Далее указывая,

Если Google Play услуги становится доступным после этого и фрагмент прошел onCreateView (LayoutInflater, ViewGroup, Bundle), снова вызывает этот метод будет инициализировать и возвращать Google Map.

Поскольку нет указаний, что с того места, где вы получили свою карту, и точно, какой метод вызывается, я предполагаю, что ваш getmap() возвращает null. Это означает, что карта не готова. Либо потому, что фрагмент не готов, либо вы работаете на устройстве без доступных сервисов Google Play.

См. getMap для получения дополнительной информации.

Смежные вопросы