java - Android grpc 失败异常

标签 java android kotlin geolocation google-geocoder

尝试使用地理编码器从 latlong 获取位置时出现此错误。

错误

Caused by java.io.IOException: grpc failed at android.location.Geocoder.getFromLocation(Geocoder.java:136) at com.example.myApp.test.Fragments.DashboardFragment$sendLocationData$1.onSuccess(DashboardFragment.kt:676) at com.example.myApp.test.Fragments.DashboardFragment$sendLocationData$1.onSuccess(DashboardFragment.kt:81) at com.google.android.gms.tasks.zzj.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)



代码
    punch_button?.setOnClickListener {
    createLocationRequest()
}


protected fun createLocationRequest() {
    mLocationRequest = LocationRequest()
    mLocationRequest?.interval = 10
    mLocationRequest?.fastestInterval = 50
    mLocationRequest?.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
    val builder = LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest!!)

    mLocationCallback = object : LocationCallback() {
        override fun onLocationResult(p0: LocationResult?) {
            super.onLocationResult(p0)
            mCurrentLocation = p0?.lastLocation
        }

    }

    val client = LocationServices.getSettingsClient(context)
    val task = client.checkLocationSettings(builder.build())



    task.addOnSuccessListener(OnSuccessListener<LocationSettingsResponse> {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            askForPermission();
        }
    })  }



    private fun askForPermission() {
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.ACCESS_FINE_LOCATION)) {
            requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 123);
        } else {
            requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 123);
        }
    } else {
        sendLocationData()
    }
}


    @SuppressLint("MissingPermission")
fun sendLocationData() {
try{
    Log.e("lat", mCurrentLocation?.latitude.toString())
    //mCurrentLocation?.latitude !=null && mCurrentLocation?.latitude !=null
    mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null)

    mFusedLocationClient.lastLocation.addOnSuccessListener({ location ->
        if (location != null) {
            val address: List<Address> = geocoder?.getFromLocation(location.latitude, location.longitude, 1)!!
        }
    })

}catch(e:Exception){
  Log.e("tag","error")
}
}

最佳答案

这是向 Google 报告的已知错误,但遗憾的是尚未解决。这个错误发生在真实设备和模拟器上。您可以在此处查看有关此问题的主题:

https://issuetracker.google.com/issues/64418751

https://issuetracker.google.com/issues/64247769

在您的情况下尝试解决此错误的解决方法是尝试使用 Geocoding API Web 服务:
https://github.com/googlemaps/google-maps-services-java

或者您可以 try catch 异常并像这样处理异常:

try{
geocoder = new Geocoder(this, Locale.getDefault())
   // ... your code that throws the exception here
}catch(e: IOException){
   Log.e("Error", "grpc failed: " + e.message, e)
   // ... retry again your code that throws the exeception
}

关于java - Android grpc 失败异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117888/

相关文章:

java - 改造 JSON 反序列化对象的 $ref 对其原始副本的引用

Kotlin - 针对 HashMap<String, String> 的对象类型检查显示警告

java - 无法在 GWT 中将字符串转换为日期

java - 如何使一个 Action 从 Struts 2 的用户界面接受动态 JSON 数据?

android - AdMob 插页式广告只显示一次

java - Android 版 Google map V2 无法正常工作?

java - Anylogic:固定种子,但如果使用行人库则不可重复运行

java - 如何保存 UTC 时间戳?

android - 在我的案例中,从后端刷新屏幕上显示的数据

kotlin - Kotlin Quasar主题和 channel 阻止问题