私が取り組んでいるアプリにGoogleマップを統合しようとしています。それにもかかわらず、私は最終的に地図を表示して位置とズームレベルを設定するSupportMapFragmentを取得しました。ここでGoogleマップAndroid - 地図が突然表示されなくなった
は、これまでの私のコードの機能ビットです:
@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);
}
はまた、私はあなたにも批判があり、私の住所モデルから緯度経度を取得するには、簡単な便利なメソッドを書いた:
/*
* 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;
}
私はこのコードは理想的ではなく、リファクタリングする必要があることを認識しています。これは私の初めてのGoogle Mapsでの作業ですので、どうすればいいのかをお気軽にお聞かせください。レイアウトXMLでMapFragmentを使用しようとすると多くの問題が発生したので、プログラムで作成しています。
問題の核心: 私は、ステージングサーバーからいくつかの偽のアドレスデータを取得し、これをCameraUpdateFactory.newLatLngZoomを呼び出すときに例外を発生させたヌルを返すアドレス#のgetLatLng方法になりました。この例外が発生した後、Googleからマップデータを取得できなくなりました。地図の断片は現在空白で、メッセージはlogcatに表示されます。
5月21日18:11:42.903:I/Android向けGoogleマップのAPI(15747):Googleのサーバーへの接続に失敗しました。接続が確立されると、別の試みが行われます。
05-21 18:11:43.093:E/Google Maps Android API(15747):地図の読み込みに失敗しました。 Googleサーバーに接続できません。これはおそらく認証上の問題です(ただし、ネットワークエラーの可能性があります)。
私は新しいapiキーを作成し、現在のものを変更なしで置き換えました。私が上記のコードに行った唯一の変更は、NULL LatLngを説明することでした。私はコードを機能状態に戻す無意味な試みでこれらの変更を元に戻しました。
さらに、見知らぬ人にするために、Google Playサービスエクストラに付属するサンプルマッププロジェクトを作成しました。これは完全に動作します(別のAPIキー、btwを持っています)。
私はここで何が間違っていますか?私は明白な何かを見落としていますか?
https://developers.google.com/maps/documentation/android/ – kongkea
使用しているGoogleマップのバージョンは何ですか?また、マップ用にデバッグキーまたはリリースキーを使用していますか? – MiStr
@kongkeaあなたのリンクに役立つ何かがありますか?マップ開発者のドキュメントへのリンクを掲示し、何も言わないことは役に立たない。 – dm78