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