android - 我面临 java.io.IOException: grpc failed 错误
问题描述
在我的应用程序中,我想向用户显示地址。我正在使用 Fused Location Provider API 来查找用户的当前位置,但我遇到了一些错误。我认为问题是线程。我想使用协程,但作为 kotlin 的新手,我不知道如何实现这一点。更好的理解,请看下面的代码
主要片段.kt
class MainFragment : Fragment() {
private lateinit var lat: String
private lateinit var lon: String
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_main, container, false)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (activity?.let {
ContextCompat.checkSelfPermission(
it, android.Manifest.permission.ACCESS_FINE_LOCATION
)
} != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
context as Activity,
arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
Constants.REQUEST_PERMISSION_REQUEST_CODE
)
} else {
getCurrentLocation()
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == Constants.REQUEST_PERMISSION_REQUEST_CODE && grantResults.isNotEmpty()) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getCurrentLocation()
} else {
Toast.makeText(context, "Permission Denied!", Toast.LENGTH_SHORT).show()
}
}
}
private fun getCurrentLocation() {
var locationRequest = LocationRequest()
locationRequest.interval = 10000
locationRequest.fastestInterval = 5000
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
//now getting address from latitude and longitude
val geocoder = Geocoder(context, Locale.getDefault())
var addresses: List<Address>
if (context?.let {
ActivityCompat.checkSelfPermission(
it,
Manifest.permission.ACCESS_FINE_LOCATION
)
} != PackageManager.PERMISSION_GRANTED && context?.let {
ActivityCompat.checkSelfPermission(
it,
Manifest.permission.ACCESS_COARSE_LOCATION
)
} != PackageManager.PERMISSION_GRANTED
) {
return
}
LocationServices.getFusedLocationProviderClient(context)
.requestLocationUpdates(locationRequest, object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
super.onLocationResult(locationResult)
LocationServices.getFusedLocationProviderClient(context)
.removeLocationUpdates(this)
if (locationResult != null && locationResult.locations.size > 0) {
var locIndex = locationResult.locations.size - 1
lat = locationResult.locations.get(locIndex).latitude.toString()
lon = locationResult.locations.get(locIndex).longitude.toString()
addresses = geocoder.getFromLocation(lat.toDouble(), lon.toDouble(), 1)
var address: String = addresses[0].getAddressLine(0)
locationText.text = address
}
}
}, Looper.getMainLooper())
}
}
我该如何解决?谢谢
解决方案
推荐阅读
- python - 如何通过我的切换帧功能将 Tkinter 条目值从一帧传递到另一帧
- ubuntu - 由于不满足依赖关系而无法安装rabbitmq:libssl
- angular7 - IE11 显示*ngFor 错误
- makefile - 为什么 C 代码会收到消息“架构 x86_64 的未定义符号:”?
- azure - Azure 应用程序错误地请求管理员同意?
- gradle - 如何在 ndk 中使用 cmake 设置 LOCAL_LDFLAGS/LOCAL_CPPFLAGS?
- c - 数数 C 编程中字符串中的单词数(我收到空字符常量错误)
- jquery - 如何对数据表中的特定列进行自定义排序?
- mysql - 将 Data Local Infile 加载到截断的表中,但它将第一行的 Primary Key 设置为 0
- java - 适应 DRY 原则的方法