StringBuilder没有附加位置地址

时间:2017-07-30 23:13:39

标签: android google-maps

我正在努力通过点击Android中的地图获取地址。我正在使用Geocoder来获取当前位置通过纬度和经度。地理编码器获取地址列表。当我尝试使用StringBuilder进行拆分并返回地址时,我得到一个null结果。这个相同的代码在模拟器中工作,但是当我在我的LG Android设备中运行代码时,我没有获得地址的任何值。这是我到目前为止所尝试过的。

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latLng) {
            Double lat = latLng.latitude;
            Double lng = latLng.longitude;
            String address = getAddressFromLatLng(latLng);
        }
    });

private String getAddressFromLatLng(LatLng latLng) {
    Toast.makeText(getContext(), "Inside getAddress", Toast.LENGTH_SHORT).show();
    Geocoder geocoder = new Geocoder(getActivity());
    StringBuilder strReturnedAddress=null;
    try {
        List<Address> addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
        if(addresses != null){
            Toast.makeText(getContext(), "Addresses is not null", Toast.LENGTH_SHORT).show();
            Address returnedAddress = addresses.get(0);
            Toast.makeText(getContext(), "Returned address " + returnedAddress, Toast.LENGTH_SHORT).show();
            strReturnedAddress = new StringBuilder();
            Toast.makeText(getContext(), "str address " + strReturnedAddress, Toast.LENGTH_SHORT).show();
            for(int i=0; i < returnedAddress.getMaxAddressLineIndex(); i++){
                strReturnedAddress.append(returnedAddress.getAddressLine(i)).append(",");
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return strReturnedAddress.toString();
}

返回地址中的Toast值实际上返回一个地址列表。在那之后我做下一个陈述strReturnedAddress = new StringBuilder();。地址后面的toast语句返回null。这只发生在真实设备上。相同的代码在模拟器中运行良好。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

更改您的代码:

    strReturnedAddress = new StringBuilder();
    Toast.makeText(getContext(), "str address " + strReturnedAddress, Toast.LENGTH_SHORT).show();
    for(int i=0; i < returnedAddress.getMaxAddressLineIndex(); i++){
        strReturnedAddress.append(returnedAddress.getAddressLine(i)).append(",");
    }

        strReturnedAddress = new StringBuilder();
        for(int i=0; i < returnedAddress.getMaxAddressLineIndex(); i++){
            strReturnedAddress.append(returnedAddress.getAddressLine(i)).append(",");
        }
        Toast.makeText(getContext(), "str address " + strReturnedAddress, Toast.LENGTH_SHORT).show();

你得到的原因是&#39; null&#39;是你的&#39; strReturnedAddress&#39;实际上是空的。

另外,您可能会发现将Context存储在私有变量中而不是多次调用它会更有帮助。调用&#39; getContext()&#39;减慢主线程。