緯度と経度から都市と州を取得する必要があります。ジオコーダーはこの機能を実行して、都市と州を取得します。しかし、エラーが発生していますJava.io.IOException: grpc failed
以下の行のみAndroidの実デバイス。 emulatorsで正常に動作しています。
new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0);
また、別の投稿で提案されているAsynctaskを使用してこの関数を呼び出しています Geocoder grpc failed スタックオーバーフローですが、何も機能しません。
デバイスも再起動しましたが、まだ失敗しています。
ここで必要なヘルプ。前もって感謝します。
注:Google Pixel XL、Samsung S6 Edge、Samsung S4でテストしました。
これは、実際のデバイスとエミュレーターの両方について、Googleの問題トラッカーで報告された継続的な問題のようです。次のバグを参照できます。
https://issuetracker.google.com/issues/64418751
https://issuetracker.google.com/issues/64247769
残念ながら、Googleはこれらの問題をまだ解決していません。
回避策として、Geocoding API Webサービスの使用を検討できます。 Githubで見つけることができるWebサービス用のJavaクライアントライブラリがあることに注意してください。
https://github.com/googlemaps/google-maps-services-Java
Java Webサービスのクライアントライブラリを使用すると、ネイティブAndroid geocoder。
クライアントライブラリのJavadocは次の場所にあります。
https://googlemaps.github.io/google-maps-services-Java/v0.2.5/javadoc/
これがお役に立てば幸いです!
インターネット接続を確認してください。何が起こっているのかは、検索と結果のレンダリングの間のある点であり、接続は遅くなるか、まったく動作しません。そのため、デフォルトエラーはGRCPが見つかりません。コードはこのタイプのエラーを処理し、マップのクラッシュを防ぐ必要があります
私にとっては、デバイスの時間でした。私はいくつかのテストを行っていましたが、デバイスの時間を変更する必要がありました。デバイスの時刻を正しく設定する必要があります。そうしないと、このエラーが発生します。
私にとっては、実際のデバイスとエミュレートされたデバイスの両方で起こりました。プロジェクトをクリーニングした後、アプリを再起動する問題を解決しました
IntentService ....でジオコーダー経由で住所を取得するための呼び出しを行うことをお勧めしますが、ラピッド開発モードで、まだサービスの設定を気にしたくない場合は、 try/catchブロックを使用できます
kotlinの例:
try{
val addressList = geocoder.getFromLocationName(locationName, 3)
//...
}catch(e: IOException) {
when{
e.message == "grpc failed" -> {/* display a Toast or Snackbar instead*/ }
else -> throw e
}
}
私がやったことは、精度をGPSのみに変更したことです。この場合、アプリケーションは私の位置を計算していませんでした。私は再び精度を高精度に変更し、アプリケーションは動作し始めましたが、まったくクラッシュしませんでした。 Androidモバイルの位置設定からGPS精度を変更できます。