java.io.IOException: grpc failed
概要
GeoCoderを使用してアドレスをインポートするコードがあります.
突然エラーが発生しました.
java.io.IOException: grpc failed
かつては良いGeoCoderでいきなりエラーが出てきて困ったけど調べてみると、間欠的な間違いのようです.
この間違いに関する文章が多い.
やっぱりGod overflow
結論は,アドレスを取得する過程が想像以上に時間がかかることである.
すなわち,主スレッドではなく他のスレッドで処理すべきである.
最終的には、ThreadまたはCoルーチンを用いた非同期処理が必要となる.
解決する
筆者はThreadを用いて解決した.
Thread {
val address = Geocoder(this@MainActivity).getFromLocation(it.latitude, it.longitude, 1)[0].getAddressLine(0).toString()
val addressList = address.split(" ")
for(idx in 1 until addressList.size) {
builder.append("${addressList[idx]} ")
}
viewModel.location.postValue(builder.toString())
}.start()
再発する
非同期処理を追加し、正常に動作していることを確認しました.
1週間後の今日は再稼働したが、またエラーが発生した.
くれぐれも
よく知ってみると、シミュレータがAVDマネージャにWipe Dataを提供するのも一つの方法である.
スタックオーバーフローで見たコメントも
シミュレータではあまり良くないかもしれないので、できるだけ実際の端末でテストしたコメント
かなり多いです.
確かにシミュレータでたまに爆発するこの間違い.
実際の端末機では一度も爆発しなかった.
シミュレータは便利です
今回のエラーのおかげで、シミュレータのテストが限られていることに気づきました.
個人学習をベースに書いているからです.
情報が正しくない可能性があります.
知っていたら後で修正します
いつでもフィードバックを歓迎します.
読んでくれてありがとう.
Reference
この問題について(java.io.IOException: grpc failed), 我々は、より多くの情報をここで見つけました https://velog.io/@jeep_chief_14/java.io.IOException-grpc-failedテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol