Pracuję nad integracją Map Google z aplikacją, nad którą pracuję i miałem do tej pory dość nieprzyjemny czas. Niezależnie od tego, w końcu dostałem SupportMapFragment wyświetlający mapę i ustawiający położenie i poziom powiększenia.Google Maps Android - mapa nagle przestała się wyświetlać
Oto funkcjonalne fragmenty mojego kodu do tej pory:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Location location = BundleChecker.getExtraOrThrow(KEY_LOCATION, new Bundle[] { savedInstanceState, getArguments() });
setLocation(location);
if (checkGooglePlayServicesStatus() == ConnectionResult.SUCCESS) {
setMapFragment(new SupportMapFragment());
getActivity().getSupportFragmentManager().beginTransaction().add(R.id.location_detail_mapFrame, getMapFragment()).commit();
}
populateAddress();
attachButtonListeners();
Runnable initMap = new Runnable() {
@Override
public void run() {
if (checkGooglePlayServicesStatus() == ConnectionResult.SUCCESS) {
try {
GoogleMap map = getMapFragment().getMap();
LatLng latLng = getLocation().getAddress().getLatLng(getActivity());
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, DEFAULT_MAP_ZOOM);
map.animateCamera(update);
}
catch (IOException e) {
Log.e(TAG, e.getMessage(), e);
Toast.makeText(getActivity(), "Unable to find location", Toast.LENGTH_SHORT).show();
}
}
}
};
Handler handler = new Handler();
handler.postDelayed(initMap, 200);
}
Również napisałem prostą metodę ogólnospożywczy, aby uzyskać długość i szerokość geograficzną z mojego modelu Adres że można krytykować, a także:
/*
* Convenience method to easily check if there is a valid lat & lng in this address
*/
public boolean hasLatLng() {
return getLatitude() != null && getLongitude() != null;
}
/*
* Convenience method for use with Google Maps API
*/
public LatLng getLatLng(Context context) throws IOException {
LatLng latLng = null;
if (hasLatLng()) {
latLng = new LatLng(getLatitude(), getLongitude());
}
else {
String locationString = getStreet() + ", " + AddressUtil.makeCityStateZipString(this);
Geocoder geoCoder = new Geocoder(context);
try {
List<android.location.Address> matches = geoCoder.getFromLocationName(locationString, 2);
if (matches != null && matches.size() > 0) {
double lat = matches.get(0).getLatitude();
double lng = matches.get(0).getLongitude();
latLng = new LatLng(lat, lng);
}
}
catch (IOException e) {
throw new IOException(e);
}
}
return latLng;
}
Mam świadomość, że ten kod nie jest idealny i wymaga refakturowania. Po raz pierwszy współpracuję z Mapami Google, więc proszę o sugestie, w jaki sposób mogę to zrobić. Doświadczyłem wielu problemów podczas próby użycia MapFragment jako kodu XML w moim układzie, więc tworzę go programowo.
Sedno sprawy: Otrzymywałem fałszywe dane adresowe z serwera pomostowego, co spowodowało, że zwracana była zerowa metoda Address # getLatLng, co spowodowało wyjątek podczas wywoływania CameraUpdateFactory.newLatLngZoom. Po otrzymaniu tego wyjątku nie mogłem już pobierać danych map od Google. Mapa jest pusty fragment teraz i komunikaty są wyświetlane w LogCat:
05-21 18: 11: 42,903: I/Mapy Google Android API (15747): Nie można skontaktować się z serwerami Google. Kolejna próba zostanie podjęta po ustanowieniu łączności.
05-21 18: 11: 43.093: E/Google Maps Android API (15747): Nie udało się wczytać mapy. Błąd podczas kontaktowania się z serwerami Google. Jest to prawdopodobnie problem z uwierzytelnianiem (ale może to być spowodowane błędami sieci).
Utworzyłem nowy klucz API i zastąpiłem bieżący w moim manifeście bez zmian. Jedyne zmiany, jakie wprowadziłem w powyższym kodzie, to uwzględnienie zerowej wartości LatLng i od tamtej pory cofnąłem te zmiany w bezsensownej próbie przywrócenia mojego kodu do stanu funkcjonalnego.
Dodatkowo, aby było trochę dziwniej, stworzyłem projekt przykładowych map, który jest dołączony do Dodatków do Usług Google Play i działa idealnie (ma oddzielny klucz API, btw).
Co mogłem tutaj zrobić źle? Czy przeoczyłem coś oczywistego?
https://developers.google.com/maps/documentation/android/ – kongkea
Jakiej wersji map Google używasz? Czy używasz klucza debugowania lub klucza wydania dla map? – MiStr
@kongkea jest coś przydatnego, co zamierzasz ze swoim linkiem? Zamieszczanie linku do dokumentacji deweloperów map i mówienie nic więcej nie jest bezużyteczne. – dm78