Android 在Google地图中获取NullPointerException

Android 在Google地图中获取NullPointerException,android,google-maps,nullpointerexception,google-maps-api-2,Android,Google Maps,Nullpointerexception,Google Maps Api 2,我正在使用谷歌地图V2。在这方面我得到了nullpointerexception 我试图调试我的代码,但我不明白代码中的问题是什么 活动代码 public class MainActivity extends FragmentActivity implements LocationListener, OnMarkerClickListener { private GoogleMap mMap; private LocationManager locati

我正在使用谷歌地图V2。在这方面我得到了nullpointerexception

我试图调试我的代码,但我不明白代码中的问题是什么

活动代码

public class MainActivity extends FragmentActivity implements LocationListener,
        OnMarkerClickListener 
{    
    private GoogleMap mMap;
    private LocationManager locationManager;
    private String provider;
    Button ib_back, notify;
    Double Latitude, longitude;
    Circle circle;

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

        mMap = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map2)).getMap();
        mMap.setMyLocationEnabled(true);

        LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
        boolean enabledGPS = service
                .isProviderEnabled(LocationManager.GPS_PROVIDER);
        boolean enabledWiFi = service
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if (!enabledGPS) {
            Toast.makeText(MainActivity.this, "GPS signal not found",
                    Toast.LENGTH_LONG).show();
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);
        } else if (!enabledWiFi) {
            Toast.makeText(MainActivity.this, "Network signal not found",
                    Toast.LENGTH_LONG).show();
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);
        }

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        Location location = locationManager.getLastKnownLocation(provider);

        if (location != null) {
            // Toast.makeText(BasicMapActivity_new.this, "Selected Provider " +
            // provider,
            // Toast.LENGTH_SHORT).show();
            onLocationChanged(location);
        } else {

            // do something
        }
        setUpMap();
    }

    @Override
    protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(provider, 400, 1, this);
        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {
        if (mMap == null) {
            mMap = ((SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map2)).getMap();
            mMap.setMyLocationEnabled(true);

            if (mMap != null) {
                setUpMap();
            }
        }
    }

    private void setUpMap() {
        mMap.getUiSettings().setCompassEnabled(true);
        mMap.getUiSettings().setTiltGesturesEnabled(true);
        mMap.getUiSettings().setRotateGesturesEnabled(true);
        mMap.getUiSettings().setScrollGesturesEnabled(true);
        mMap.getUiSettings().setZoomControlsEnabled(true);
        mMap.getUiSettings().setZoomGesturesEnabled(true);
        setLocation();
    }

    public void setLocation() {

        Circle circle = mMap.addCircle(new CircleOptions()
                .center(new LatLng(Latitude, longitude)).radius(100) /// Here i am getting the exception
                .strokeColor(Color.RED));

        float[] distances = new float[1];

        //Array List for list of lat and log. 
        //  final ArrayList<Integer> arrayList = new ArrayList<Integer>();

        for (int i = 0; i < 10; i++) {
            // random latitude and logitude
            double[] randomLocation = createRandLocation(Latitude, longitude);

            // Adding a marker
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(randomLocation[0], randomLocation[1])).title(
                    "Hello Maps " + i);

            Location.distanceBetween(randomLocation[0], randomLocation[1],
                    circle.getCenter().latitude, circle.getCenter().longitude,
                    distances);

            // arrayList.add((int) distances[0]);

            Log.e("Random", "> " + randomLocation[0] + ", " + randomLocation[1]);
            Toast.makeText(
                    MainActivity.this,
                    " Random Location " + randomLocation[0] + ","
                            + randomLocation[0], Toast.LENGTH_LONG).show();

            if (i == 0)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
            if (i == 1)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
            if (i == 2)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
            if (i == 3)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
            if (i == 4)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
            if (i == 5)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
            if (i == 6)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_RED));
            if (i == 7)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
            if (i == 8)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));
            if (i == 9)
                marker.icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));

            if (distances[0] < circle.getRadius()) {
                // Add Marker belong here
                mMap.addMarker(marker);
            }               
        }    
    }

    @Override
    public boolean onMarkerClick(Marker arg0) {
        // TODO Auto-generated method stub
        return false;
    }

    Marker startPerc = null;
    Location old_one;

    @Override
    public void onLocationChanged(Location location) {
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        // Toast.makeText(BasicMapActivity_new.this, "Location " + lat+","+lng,
        // Toast.LENGTH_LONG).show();
        LatLng coordinate = new LatLng(lat, lng);
        Latitude = lat;
        longitude = lng;

        Toast.makeText(MainActivity.this,
                "Location " + coordinate.latitude + "," + coordinate.longitude,
                Toast.LENGTH_LONG).show();

        startPerc = mMap.addMarker(new MarkerOptions()
                .position(coordinate)
                .title("Current Location")
                .icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(coordinate, 18.0f));
    }

    private double[] createRandLocation(double latitude, double longitude) {
        return new double[] { latitude + ((Math.random() - 0.5) / 500),
                longitude + ((Math.random() - 0.5) / 500),
                150 + ((Math.random() - 0.5) * 10) };
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }           
}

纬度
经度
未初始化,因此引发
NullPointerException
。在下面的代码中使用变量之前,先初始化变量

Circle circle = mMap.addCircle(new CircleOptions()
            .center(new LatLng(Latitude, longitude)).radius(100) /// Here i am getting the exception
            .strokeColor(Color.RED));
而不是

double lat = location.getLatitude();
double lng = location.getLongitude();
试一试

甚至

double lat = location.getLatitude();
double lng = location.getLongitude();
if(lat == null || lng == null || lat == 0.0 || lng == 0.0){
   lat=0.0;
   lng=0.0;
}

@Raghunandan我在问题中也做了标记。中心(新的LatLng(纬度,经度))。半径(100)纬度和经度在哪里初始化?并使用
double latitude
@Raghunandan查看我在创建之前发布的完整代码,我只看到声明。不初始化,也
public LatLng(双纬度,双经度)
double
作为参数,不
double
@Raghunandan在onlocationchange中我已经这样做了,op说它在
onLocationChanged
中初始化<代码>纬度=纬度;经度=液化天然气无论
onLocationChangedListener如何,都将调用您的
setLocation()
方法。所以你需要处理
null
值。@VinothkumarArputharaj我该如何处理这个问题?你能在这个+1中给我一些建议吗:我可以补充一下,没有太多理由使用
Double
作为对象
double
可以很好地工作,然后null大小写就不存在了(至少它不会导致值为0的崩溃)。@GauravPandey
if(Latitude==null | | | longitude==null){Toast.makeText(getApplicationContext(),“Lat Long not set”,Toast.LENGTH\u SHORT)。show();return;
double lat = location.getLatitude();
double lng = location.getLongitude();
if(lat == null || lng == null){
   lat=0.0;
   lng=0.0;
}
double lat = location.getLatitude();
double lng = location.getLongitude();
if(lat == 0.0 || lng == 0.0){
   lat=0.0;
   lng=0.0;
}
double lat = location.getLatitude();
double lng = location.getLongitude();
if(lat == null || lng == null || lat == 0.0 || lng == 0.0){
   lat=0.0;
   lng=0.0;
}