android谷歌地图中心的相机位置名称

时间:2018-04-03 20:25:15

标签: android google-maps

大家好我在我的地图相机的中心有一个标记,我想显示地方标记的信息现在我现在写这个但是它不起作用,这里是错误

 @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

1 个答案:

答案 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。