Geocoder在Activity中表现良好,而在另一个中,Geocoder总是返回null

时间:2017-07-28 08:19:56

标签: android google-maps android-fragments google-geocoder

我正在使用地图的应用程序中工作,在第一个活动中我有一个NavigationDrawer包含不同的片段,其中一个我每隔10秒获得一个最后一个位置,并设置TextView与该位置的地址。一切都很完美,因为我创建了一个新的Activity来了解有MapView的地方的详细信息,当你放一个Marker它得到了它的地址,但它总是返回null我不知道为什么......

有我的代码。 第一个Activity Fragment

public void setLocationListeners() {
    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(getActivity(),
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_PERMISSION_LOCATION);
    } else {
        mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                Location lastLocation = locationResult.getLastLocation();
                Address address = getAddress(lastLocation.getLongitude(), lastLocation.getLatitude(), getContext());
                myLocation = new LatLng(lastLocation.getLatitude(), lastLocation.getLongitude());
                if (address == null) {
                    ((TextView) mView.findViewById(R.id.txtVosEstas)).setText(String.valueOf(
                            lastLocation.getLongitude() + " " + lastLocation.getLatitude()));
                } else
                    ((TextView) mView.findViewById(R.id.txtVosEstas)).setText(address.getAddressLine(0).split(",")[0]);

                ((TextView) mView.findViewById(R.id.txtBearing)).setText(String.valueOf(lastLocation.getBearing()));
                ((TextView) mView.findViewById(R.id.txtVelocidad)).setText(String.valueOf(lastLocation.getSpeed()));
            }
        };
    }

}

“getAddress”是我MapHelper

中的 静态 方法
public static Address getAddress(double lng, double lat, Context c) {
    Geocoder geocoder = new Geocoder(c, Locale.getDefault());
    try {
        List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
        return addresses.get(0);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (IndexOutOfBoundsException e) {
    }
    return null;
}

当地图准备就绪时,我在另一个Activity中调用相同的方法。

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick(LatLng latLng) {
            mMap.clear();
            mMap.addMarker(new MarkerOptions().position(latLng));
            String lat = String.format("%.7f", latLng.latitude);
            String lng = String.format("%.7f", latLng.longitude);
            ((TextView) findViewById(R.id.txtLat)).setText(lat);
            ((TextView) findViewById(R.id.txtLng)).setText(lng);
            Address address = getAddress(Double.valueOf(lat), Double.valueOf(lng), getApplicationContext());
            ((MultiAutoCompleteTextView) findViewById(R.id.txtDireccion)).setText(address != null? address.getAddressLine(0) : "Sin dirección");
        }
    });
    if (mLugar != null){
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLugar.getLatLng(), 15));
        MarkerOptions marker = new MarkerOptions()
                .position(mLugar.getLatLng())
                .title(mLugar.getNombre());
        mMap.addMarker(marker);
    }
}

在其中我永远不会得到结果。

0 个答案:

没有答案