StringBuilder 没有附加位置地址

Posted

技术标签:

【中文标题】StringBuilder 没有附加位置地址【英文标题】:StringBuilder is not appending the location address 【发布时间】:2018-01-06 10:02:53 【问题描述】:

我正在努力获取在 android 中点击地图的地址。我正在使用地理编码器来获取通过纬度和经度的当前位置。地理编码器获取地址列表。当我尝试使用 StringBuilder 分割并返回地址时,我得到一个空结果。相同的代码在模拟器中工作,但是当我在我的 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();

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

【问题讨论】:

什么是Geocoder?那是返回null,所以请添加它 "str address " + strReturnedAddress 似乎永远是空的 【参考方案1】:

从以下位置更改您的代码:

    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();

你得到'null'的原因是你的'strReturnedAddress'实际上是空的。

此外,您可能会发现将 Context 存储在私有变量中而不是多次调用它更有帮助。调用 'getContext()' 会减慢主线程的速度。

【讨论】:

以上是关于StringBuilder 没有附加位置地址的主要内容,如果未能解决你的问题,请参考以下文章

Java中StringStringBuffer和StringBuilder比较

String类_StringBuffer_StringBuilder_list

String StringBuilder StringBuffer

用 StringBuilder 附加逗号

java:使用StringBuilder在开头插入

StringBuilder