2017-07-30 9 views
0

私はアンドロイドで地図をクリックするとアドレスを取得しようとしています。現在の位置を緯度と経度で渡すためにGeocoderを使用しています。ジオコーダーはアドレスのリストを取得します。 StringBuilderを使用して分割してアドレスを返そうとすると、nullの結果が返されます。この同じコードはエミュレータで動作しますが、LG Androidデバイスでコードを実行すると、Addressの値は取得されません。これはこれまで私が試したことです。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(); 
} 

返されたアドレスのトースト値は、実際にはアドレスのリストを返します。その後、次の文はstrReturnedAddress = new StringBuilder();です。アドレスに続くトースト文はnullを返します。これは実際のデバイスでのみ発生します。同じコードがエミュレータでうまく機能します。どんな助けもありがとうございます。

+0

「ジオコーダ」とは何ですか?それはnullを返すので、それを追加してください。 –

+0

'' str address "+ strReturnedAddress'は常に空です。 –

答えて

2
から、あなたのコードを変更し

 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 = 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' は実際には空であるということです。

Contextを複数回呼び出すのではなく、プライベート変数に保存すると便利です。 'getContext()'を呼び出すとメインスレッドが遅くなります。

関連する問題