2017-07-20 11 views
7

ジオコーダーは今日まで正常に動作していました。 0の長さのStringを返すようになりました。 注:これはジオコーダーのスレッドと重複していません。スレッドを開始する前にインテントサービスとAsyncTaskを使用して取得しています(AsyncTaskアプローチは8か月間有効です).FusedLocationProviderClientを使用してGoogleからthis codeと新しいcodeをチェックしましたコード)は、長さがゼロの文字列も返します。 Androidの公式ページのThis linkには、インテントサービスを利用する方法が示されています。ジオコーダーは長さゼロのアドレスを返します

Android 5.1では完全なアドレスが取得されますが、Android 7.1では長さゼロのアドレスが返されます。

コード私は以前まで使用していたし、今日までうまくいった。

private void getAddressFromCoordinates() { 

    new AsyncTask<Void, String, Void>() { 

     @Override 
     protected Void doInBackground(Void... params) { 

      try { 
       addresses.clear(); 
       addresses.addAll(geocoder.getFromLocation(mCurrentLocation.getLatitude(), 
         mCurrentLocation.getLongitude(), 1)); 


      } catch (IOException e) { 
       e.printStackTrace(); 
       showToastAsync(getString(R.string.activity_loc_no_location_info)); 
      } catch (IllegalArgumentException illegalArgumentException) { 
       // Catch invalid latitude or longitude values. 
       showToastAsync("Invalid latitude or longitude values"); 
      } 

      // Handle case where no address was found. 
      if (addresses == null || addresses.size() == 0) { 
       showToastAsync(getString(R.string.activity_loc_no_address_is_found)); 
      } else { 
       Address address = addresses.get(0); 
       ArrayList<String> addressFragments = new ArrayList<String>(); 
       for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { 
        addressFragments.add(address.getAddressLine(i)); 
       } 

       addressInfo = TextUtils.join(System.getProperty("line.separator"), addressFragments); 
       addressSingleLine = LocationActivity.addressInfo.replaceAll("[\r\n]+", " "); 
      } 
      return null; 
     } 

    }.execute(); 
} 

回答あなたはいくつかのバージョンでこれを行う必要はありませんアンドロイド7上のゼロの長さのアドレスを盗んではないためにループのために=を追加することです。 Google参照Githubページのコードにも=がありません。だから私はその理由を見つけることができませんでした。

答えて

8

問題は、この行である:

ための(I = 0をint型;私< address.getMaxAddressLineIndex();私は++)

それはでなければならないための:(I = 0をint型、I < = address.getMaxAddressLineIndex(); i ++) getMaxAddressLineIndexは最大のインデックスを返すためです。

+1

によって示唆されているように、あなたのforループの状態を変更する必要があるはい、=追加されるべきものですが、Androidのバージョンは、それは非常に興味深いです7.でない場合、それは動作します。バージョンがAnroid 7でない場合、誰がそれがなぜ機能するのか説明できますか? – Thracian

+0

5.1.1を実行しているデバイスに同じエラーが見つかりました – Kennet

+0

正常に機能しました。 APIの変わった変化 –

1

少し前に私のコードでまったく同じ問題が発生したことに気付きました。明らかに、これはdocumentationに見られるようにAPIの変更点です。今すぐgetMaxAddressLineIndex()

現在アドレス行を指定するために使用されている最大のインデックスを返します。アドレス行が指定されていない場合、-1が返されます。

ですから、@DavidBar

+0

はい、私は今日それを見て、 '='をfoorループに追加すると行方不明になりました。面白いのは、Android 5と6で等号なしで動作することです。私は本当になぜそれがいくつかのAndroidのバージョンで動作しないと他の人に取り組んでいるのだろうかと思う。 – Thracian

関連する問題