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を提供するのも一つの方法である.

スタックオーバーフローで見たコメントも
シミュレータではあまり良くないかもしれないので、できるだけ実際の端末でテストしたコメント
かなり多いです.
確かにシミュレータでたまに爆発するこの間違い.
実際の端末機では一度も爆発しなかった.
シミュレータは便利です
今回のエラーのおかげで、シミュレータのテストが限られていることに気づきました.
個人学習をベースに書いているからです.
情報が正しくない可能性があります.
知っていたら後で修正します
いつでもフィードバックを歓迎します.
読んでくれてありがとう.