2017-07-30 61 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()'會減慢主線程的速度。