我正在努力通过点击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。这只发生在真实设备上。相同的代码在模拟器中运行良好。任何帮助表示赞赏。
答案 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;减慢主线程。