ジオコーダーは今日まで正常に動作していました。 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ページのコードにも=がありません。だから私はその理由を見つけることができませんでした。
によって示唆されているように、あなたの
for
ループの状態を変更する必要があるはい、=追加されるべきものですが、Androidのバージョンは、それは非常に興味深いです7.でない場合、それは動作します。バージョンがAnroid 7でない場合、誰がそれがなぜ機能するのか説明できますか? – Thracian5.1.1を実行しているデバイスに同じエラーが見つかりました – Kennet
正常に機能しました。 APIの変わった変化 –