我使用以下代码尝试在将字符串地址转换为LatLng后将标记添加到某个位置。但该应用程序总是崩溃与NPE错误。我尝试了调试,并在注释显示的行显示错误。我确认其中没有使用的变量为null。任何人都知道我做错了什么?
public LatLng getLocationFromAddress(String strAddress) {
Geocoder coder = new Geocoder(this);
List<Address> address;
LatLng p1 = null;
try {
address = coder.getFromLocationName(strAddress, 5);
if (address != null && address.size() > 0) {
Address location = address.get(0);
p1 = new LatLng(location.getLatitude(), location.getLongitude());
} else {
p1 = new LatLng(19.111258, 72.908313);
}
} catch (IOException e) {
e.printStackTrace();
return p1;
}
return p1;
}
public void prepareMap() {
final LatLng REST = getLocationFromAddress(restAddress + ","
+ restLocation);
int zoomNiveau = 15;
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
map.addMarker(new MarkerOptions().position(REST).title(restName));//error points here
map.moveCamera(CameraUpdateFactory.newLatLngZoom(REST, zoomNiveau));
}
答案 0 :(得分:0)
该行上有一些可能导致NPE的事情 - 我会将其分开一些,以便您可以缩小问题范围。
map.addMarker(new MarkerOptions().position(REST).title(restName));
可以改为......
MarkerOptions options = new MarkerOptions();
options.position(REST);
options.title(restName);
map.addMarker(options);
REST变量对我来说很好,所以我的赌注是'map'或'restName'。
请注意以下MapFragment上的Android文档:
If a GoogleMap is not available, getMap() will return null.