2017-07-30 27 views
0

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

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。这只发生在一个真实的设备上。相同的代码在仿真器中很有用。任何帮助表示赞赏。

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

你得到 '空' 的原因是,你的 'strReturnedAddress' 实际上是空的:

+0

什么是Geocoder?这是返回null,所以请添加它 –

+0

'“str地址”+ strReturnedAddress'将永远是空的,看来 –

回答

2

从改变你的代码。

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