web-dev-qa-db-ja.com

Geocoder.getFromLocation grpcがAndroid実デバイスで失敗しました

緯度と経度から都市と州を取得する必要があります。ジオコーダーはこの機能を実行して、都市と州を取得します。しかし、エラーが発生しています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でテストしました。

8
fargath

これは、実際のデバイスとエミュレーターの両方について、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/

これがお役に立てば幸いです!

9
xomena

インターネット接続を確認してください。何が起こっているのかは、検索と結果のレンダリングの間のある点であり、接続は遅くなるか、まったく動作しません。そのため、デフォルトエラーはGRCPが見つかりません。コードはこのタイプのエラーを処理し、マップのクラッシュを防ぐ必要があります

7
Pxaml

私にとっては、デバイスの時間でした。私はいくつかのテストを行っていましたが、デバイスの時間を変更する必要がありました。デバイスの時刻を正しく設定する必要があります。そうしないと、このエラーが発生します。

2
hiddeneyes02

私にとっては、実際のデバイスとエミュレートされたデバイスの両方で起こりました。プロジェクトをクリーニングした後、アプリを再起動する問題を解決しました

1
Polyterative

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
 }

}

1
lasec0203

私がやったことは、精度をGPSのみに変更したことです。この場合、アプリケーションは私の位置を計算していませんでした。私は再び精度を高精度に変更し、アプリケーションは動作し始めましたが、まったくクラッシュしませんでした。 Androidモバイルの位置設定からGPS精度を変更できます。