Android 在Google地图中获取NullPointerException
我正在使用谷歌地图V2。在这方面我得到了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
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的崩溃)。@GauravPandeyif(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;
}