3

ほとんどのコード例は私が望まないMapFragmentを使用しているため、私はGoogleMap表示用のMapViewクラスを使用して探索しようとしていますが、運がありません。

Google Maps AndroidAPIv2を使用しています。

最初は、 Googleの例からここでテストするために、私はなんとか典型的な法線マップを表示することができました。

public class POnlineMapView extends Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.online_map_activity);
    }
}

上記のコードは完全に機能し、すべてが正しく設定されていることを示しています。

現在、MapViewクラスを使用して中心点などの表示設定を操作しようとしていますが、GoogleMapオブジェクトを取得しようとするたびにnullオブジェクトを取得しているようです。なんでそうなの?

public class POnlineMapView extends Activity {

    private MapView myMapView;
    private GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        myMapView = new MapView(getApplicationContext());
        Bundle b = getIntent().getExtras();
        double longitude = b.getDouble("longitude");
        double latitude = b.getDouble("latitude");

        setContentView(R.layout.online_map_activity);
        map = myMapView.getMap();

        CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(latitude,longitude));
        CameraUpdate zoom=CameraUpdateFactory.zoomTo(17);

        map.moveCamera(center); //this gives a NullPointerException, probably due to the myMapView.getMap() method?
        map.animateCamera(zoom);    
    }
}
4

6 に答える 6

3

Google Playサービスがインストール(および更新)されているかどうかを確認する

Google Maps Android API v2がGooglePlayServicesNotAvailableExceptionをスローし、古い場合、SupportMapFragment.getMap()がnullを返すを参照してください

https://developers.google.com/maps/documentation/android/map(セクションマップの可用性の確認)もお読みください

于 2013-01-25T09:43:52.113 に答える
3

これは古い質問のようですが、MapView を使用しようとして同じ問題が発生していました。

Google Play サービス ライブラリを適切にインポートしたと仮定すると、Google サービスにアクセスできるかどうかを確認する必要があります。これは onCreate メソッドで実行でき、Google Maps Android AP を初期化する必要があります。これを行うには、次のコードを onCreate メソッドに追加します

try {
        MapsInitializer.initialize(this);
    } catch (GooglePlayServicesNotAvailableException e) {
        Log.e("Address Map", "Could not initialize google play", e);
    }

switch (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) )
{
  case ConnectionResult.SUCCESS:
      Toast.makeText(getApplicationContext(), "SUCCESS", Toast.LENGTH_SHORT).show();
      break;
  case ConnectionResult.SERVICE_MISSING: 
      Toast.makeText(getApplicationContext(), "SERVICE MISSING", Toast.LENGTH_SHORT).show();
      break;
  case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED: 
      Toast.makeText(getApplicationContext(), "UPDATE REQUIRED", Toast.LENGTH_SHORT).show();
      break;
  default: Toast.makeText(getApplicationContext(), GooglePlayServicesUtil.isGooglePlayServicesAvailable(this), Toast.LENGTH_SHORT).show();
}

成功した場合は、これまでのところすべてが機能しています。また、アクティビティ ライフサイクルのメソッドを実装し、これらのメソッドのすべての内部でマップ ビューの対応するメソッドを呼び出す必要があります。

@Override
protected void onResume() {
    myMapView.onResume();
    super.onResume();

}

@Override
protected void onPause() {
    myMapView.onResume();
    super.onPause();

}

@Override
protected void onDestroy() {
    myMapView.onDestroy();
    super.onDestroy();
   //((MapView)findViewById(R.id.mapView)).onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    myMapView.onLowMemory();
}

最後に、Google Maps API キーをマニフェスト ファイルに追加したことを確認する必要があります。

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="YOUR KEY"/>

キーを取得する手順については、https ://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api をご覧ください。

編集:言い忘れましたが、マニフェストファイルにアプリケーションのアクセス許可を設定する必要もあります

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

これは、アプリケーション ブロック内で設定する必要があります ...

于 2013-10-17T06:01:44.523 に答える
0

マップビューもうまくいきませんでした。
私はMapFragmentで運が良かった.

これを試して:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;

public class TestActivity extends FragmentActivity {

  SupportMapFragment mapFragment;
  GoogleMap map;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (mapFragment == null) {
      mapFragment = new SupportMapFragment();
      getSupportFragmentManager().beginTransaction()
          .add(android.R.id.content, mapFragment).commit();
    }
  }

  @Override
  protected void onResume() {
    super.onResume();
    setupMap();
  }

  private void setupMap() {
    if (map != null)
      return;
    map = mapFragment.getMap();
    if (map == null)
      return;

    doZoom();
  }

  private void doZoom() {
    if (map != null) {
      map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(45.424900,
          -75.694968), 17));
    }
  }
}
于 2013-01-31T21:12:48.000 に答える
0

この方法を試してください:

  private MapView myMapView;   
  private GoogleMap map;  
      myMapView = (MapView) findViewById(R.id.map);     
      if (map == null) {     
                map = ((MapView) findViewById(R.id.map)).getMap();     
       }
于 2013-01-25T08:41:02.263 に答える