2016-03-24 12 views
0

mapsviewがあり、getMap()を使用するとうまく動作しますが、警告が表示されます。しかし、getMap()getMapAsync()に変更すると、アプリがクラッシュします。MapsView - AndroidでgetMapAsync()を使用するとアプリケーションがクラッシュする

はここにここに私のコード

public class MapsActivity extends AppCompatActivity implements GoogleMap.OnInfoWindowClickListener, 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener, 
    GoogleMap.OnMarkerDragListener, 
    GoogleMap.OnInfoWindowCloseListener, 
    LocationListener { 

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

     ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMapAsync(this); 

     mMap.setOnInfoWindowClickListener(this); 
     mMap.setOnInfoWindowCloseListener(this); 
     mMap.setOnMarkerDragListener(this); 

     mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { 
      @Override 
      public void onMapClick(LatLng latLng) { 
       markerPoints.add(latLng); 
       MarkerOptions options = new MarkerOptions(); 
       // Setting the position of the marker 
       options.position(latLng); 
      } 
     }); 

     mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 

      @Override 
      public boolean onMarkerClick(Marker marker) {  
       //Getting the coordinates 
       toLatitude = marker.getPosition().latitude; 
       toLongitude = marker.getPosition().longitude; 

       dest = new LatLng(toLatitude, toLongitude); 
       mMap.animateCamera(CameraUpdateFactory.newLatLng(dest)); 

       return ((toLatitude == my_marker.getPosition().latitude) && (toLongitude == my_marker.getPosition().longitude)); 
      } 
     }); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     setUpMap(); 
    } 

    private void setUpMap() { 
     if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
       == PackageManager.PERMISSION_GRANTED) { 
      mMap.setMyLocationEnabled(true); 
     } else { 
      Toast.makeText(MapsActivity.this, "Anda harus menyetujuinya agar dapat menikmati semua fitur yang ada", Toast.LENGTH_LONG).show(); 
      if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
        == PackageManager.PERMISSION_GRANTED) { 
       mMap.setMyLocationEnabled(true); 
      } 
     } 

     mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     mMap.setTrafficEnabled(true); 
     CameraPosition cameraPosition = new CameraPosition.Builder() 
       .zoom(15)     // Sets the zoom 
       .target(new LatLng(-6.597629,106.79957)) 
       .tilt(40)     // Sets the tilt of the camera to 30 degrees 
       .build();     // Creates a CameraPosition from the builder 
     mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
    } 
} 

だ私のコードで間違って何のxmlレイアウト

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</FrameLayout> 

ですか?どんな助けでも大歓迎です。

ありがとうございました。

+0

場所です 解決onMapReady Callback.Hopeでのmmapオブジェクトを使用してくださいlogcat –

+0

例外はありますか? – tak3shi

+1

MapsViewでgetMapAsync()を使用すると[Appクラッシュ]が重複する可能性があります(http://stackoverflow.com/questions/36193731/app-crash-when-using-getmapasync-in-mapsview) – Selvin

答えて

0

私はそれがnullポインタ例外をスローしなければならないので、それが初期化される前MMAPは、あなたがやっているhere.WhatのGoogleMapオブジェクトですがMMAPを使用していると仮定します。

投稿してください、それはあなたのproblem.Soは、短期的にすべてを行う必要がonMap準備コールバック内のすべてのあなたのmmap 用法

0

getMapAsyncの瞬間にはonMapReadyと呼ばれていません。 ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))がヌルでないか、onMapReady()が正常終了していることを確認してください。

+0

この 'SupportMapFragment mapFragment =((SupportMapFragment)getSupportFragmentManager()。findFragmentById(R.id.map)); if(mapFragment!= null){ mapFragment.getMapAsync(this) } ' しかし、まだクラッシュ:( –

関連する問題