2013-05-22 7 views
11

私が取り組んでいるアプリに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に表示されます。

SupportMapFragment with no map content

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を持っています)。

私はここで何が間違っていますか?私は明白な何かを見落としていますか?

+0

https://developers.google.com/maps/documentation/android/ – kongkea

+0

使用しているGoogleマップのバージョンは何ですか?また、マップ用にデバッグキーまたはリリースキーを使用していますか? – MiStr

+6

@kongkeaあなたのリンクに役立つ何かがありますか?マップ開発者のドキュメントへのリンクを掲示し、何も言わないことは役に立たない。 – dm78

答えて

19

この問題は、通常、google-play-serviceライブラリを参照する際の問題から発生します。 、特に最初の3つのステップ私はあなたのアプリケーションにGoogleマップを統合する方法について書いたこのブログの記事を見てみましょう:

Google Maps API V2

を本の別の原因は、あなたがGoogle APIを設定していないことが考えられますコンソールは正しくので、私はあなたにもこのガイドを見てみましょうすることをお勧め:あなたはマニフェストファイル内のアクセス権に問題のいくつかの種類を持っている場合

Google Maps API V2 Key

これを引き起こす可能性があり、別の理由があります。必要な権限についての最初のガイドも参照できます。

+5

ありがとうございます。明らかにマージの競合により、私のマニフェストからが失われました。 – dm78

+0

あなたは@DavidMaysを歓迎します。 –

+0

はい... READ_GSERVICESのスペルミスは私の死でした...ありがとう!!! –

2

使用このような何か:

  1. 更新GoogleはSDKでサービスを演じます。

  2. デバイスからAppを手動でアンインストールし、デバイスを再起動します。 また、一つのことがhttps://code.google.com/apis/console/

    から編集された新しいSH1コードに新しいAPIキーを取得するのですか

あなたは[ウィンドウ好み-アンドロイドからあなたSH1コードを取得することができ、私はそれを試してみましたし、そのが完全BRO行きます-buid

+0

あなたの答えが他の人に役立つことを願っています。私の場合、それは単にもう存在しなかった許可です。 – dm78

+0

アプリをアンインストールして再インストールしてくれました。 – toobsco42

0

Googleマップを動作させることをGoogleの目的としています。これは私のために働いた:

- アップデートGoogleは、Androidマネージャー とサービスを更新 - Sha1キーストア(ウィンドウ - >設定 - >アンドロイド - >ビルド)とプロジェクトパッケージ名。これでやります:https://code.google.com/apis/console/

誰かがパッケージ名を変更してアプリを賞賛していました!

Googleマップのおかげで、怒りの管理療法を受ける前にこれを試してください。

関連する問題