我试图从Google地图上的指定位置获取地址,并得到此错误:
Blockquote 致命异常:主要 流程:elder.msu.testlocationapp,PID:23559 java.lang.RuntimeException:无法实例化活动ComponentInfo {elder.msu.testlocationapp / elder.msu.testlocationapp.MapsActivity}:java.lang.NullPointerException:尝试从字段'double com.google.android.gms.maps中读取。对空对象引用的model.LatLng.latitude' 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2366) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2515) 在android.app.ActivityThread.access $ 1000(ActivityThread.java:154) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1379) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:157) 在android.app.ActivityThread.main(ActivityThread.java:5571) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:745) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635) 原因:java.lang.NullPointerException:尝试从null对象引用上的字段“ double com.google.android.gms.maps.model.LatLng.latitude”读取 在elder.msu.testlocationapp.MapsActivity(MapsActivity.java:32) 在java.lang.Class.newInstance(本地方法) 在android.app.Instrumentation.newActivity(Instrumentation.java:1068) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2356) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2515) 在android.app.ActivityThread.access $ 1000(ActivityThread.java:154) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1379) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:157) 在android.app.ActivityThread.main(ActivityThread.java:5571) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:745) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
我清单上的所有必需品。 这是我的地图活动代码
public void onMapReady(GoogleMap googleMap) {
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
markerOptions.position(latLng);
markerOptions.title(latLng.latitude + " : " + latLng.longitude);
mMap.clear();
mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.addMarker(markerOptions);
}
});
private void getAddress(){
Geocoder geocoder;
final List<Address> addresses;
geocoder = new Geocoder(this, Locale.getDefault());
try{
addresses = geocoder.getFromLocation(latitude,longitude,1);
if (addresses!=null && addresses.size() > 0){
address = addresses.get(0).getAddressLine(0);
city = addresses.get(0).getLocality();
}
}catch (IOException e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Cannot get data", Toast.LENGTH_SHORT).show();
}
btnOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAddress();
confirmData(address, city);
}
});
}
private void confirmData(String address, String city) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
Bundle bundle = new Bundle();
intent.putExtra("data", bundle);
intent.putExtra("address", address);
intent.putExtra("city", city);
startActivity(intent);
finish();
}
答案 0 :(得分:0)
要停止此错误,只需包装地图单击侦听器代码。
if (latLng != null) {
markerOptions.position(latLng);
markerOptions.title(latLng.latitude + " : " + latLng.longitude);
mMap.clear();
mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.addMarker(markerOptions);
}
至于为什么它给出一个空值,我不确定。活动首次开始时在onCreate期间会发生这种情况吗?