在MapsView - Android中使用getMapAsync()时应用程序崩溃

时间:2016-03-24 12:13:58

标签: java android google-maps-android-api-2

我有一个mapsview,它在使用getMap()时工作正常,尽管它向我显示了一个已删除的警告。但是当我将getMap()更改为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>

我的代码出了什么问题?任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

getMapAsync致电onMapReady时,((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))未完成。请确保onMapReady()不为空或var numberArray = [[1, 5, 12], [1, -1], [5, 11, 45, -3], [0, 1, 2]], sum = numberArray.reduce(function (r, a) { return a.reduce(function (s, b) { return b > 0 ? s + b : s; }, r); }, 0); document.write(sum);已成功完成。

答案 1 :(得分:0)

我认为 mMap 是这里的GoogleMap对象。你正在做的是在它被初始化之前使用 mMap 所以它必须抛出空指针异常< /强>

  

确保在onMapReady Callback.Hope中使用mMap对象解决   你的问题。简而言之,你需要做的就是放置你所有的mMap   用于onMap Ready回调