大家好我在我的地图相机的中心有一个标记,我想显示地方标记的信息现在我现在写这个但是它不起作用,这里是错误
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Toast.makeText(getContext(), "Map is Ready", Toast.LENGTH_SHORT).show();
getDeviceLocation();
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(cameraPosition.target.latitude,cameraPosition.target.longitude, 1);
Address obj = addresses.get(0);
String add = obj.getAddressLine(0);
Toast.makeText(getContext(), add, Toast.LENGTH_SHORT).show();
Log.e("IGA", "Address" + add);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
这是错误,它来自List
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
答案 0 :(得分:0)
由于你没有发布整个堆栈跟踪,我真的不知道哪个对象正在抛出IndexOutOfBoundsException
。但是这个示例代码应该让您指向正确的方向。
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(cameraPosition.target.latitude,cameraPosition.target.longitude, 1);
for(Address address : addresses){
if(address.getMaxAddressLineIndex() > -1){
String add = address.getAddressLine(0);
Toast.makeText(getContext(), add, Toast.LENGTH_SHORT).show();
Log.e("IGA", "Address" + add);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
我为addresses
对象添加了一个foreach循环。我看到您在getFromLocation()
方法中放置了最大地址1,但如果将其更改为更高的数字,则此代码仍应适用于所有Addresses
。
我还通过检查address
是否大于-1来检查getAddressLine(0)
是否实际上具有getMaxAddressLineIndex()
的值。这是指数不计算。如果它为空,getMaxAddressLineIndex()
将返回-1。