类型不匹配:推断的类型是 <no name provided> 但上下文是预期的
Type mismatch: inferred type is <no name provided> but Context was expected
我通过创建一个应用程序通知你,我尝试验证它是否有权从片段中保存文件 this 但它在上下文 (this) 声明中给我一个错误消息类型不匹配:推断类型是,但上下文是预期的。
任何帮助都是发自内心的感谢
我的代码
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
downloadButton.setOnClickListener(object : View.OnClickListener {
// here I would like to move to FormActivity
override fun onClick(v: View?) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(
this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),
100
)
} else {
saveImageToStore()
}
} else {
saveImageToStore()
}
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == 100) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
saveImageToStore()
} else {
Toast.makeText(this, "ASDASDA", Toast.LENGTH_SHORT).show()
}
}
}
使用 requireContext()
而不是 this
。片段不是上下文。您需要使用 requireContext()
而不仅仅是 context
,因为 context
是可以为 null 的 Context?
。在 onActivityCreated()
函数中使用不可为 null 的 requireContext()
是安全的。
您需要更换:
ContextCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
通过
ContextCompat.checkSelfPermission(requireContext(),android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
和
ActivityCompat.requestPermissions(
this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),100)
来自
ActivityCompat.requestPermissions(
requireActivity(), arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),100)
ContextCompat.checkSelfPermission()
需要上下文引用作为第一个参数,并且您正在使用 'this'
传递片段引用
ActivityCompat.requestPermissions()
需要一个 activity 引用作为第一个参数,并且您正在使用 'this' 传递片段引用
您应该尝试使用 registerForActivityResult(RequestPermission())
在运行时请求权限的新方法
https://developer.android.com/training/permissions/requesting#request-permission
我通过创建一个应用程序通知你,我尝试验证它是否有权从片段中保存文件 this 但它在上下文 (this) 声明中给我一个错误消息类型不匹配:推断类型是,但上下文是预期的。
任何帮助都是发自内心的感谢
我的代码
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
downloadButton.setOnClickListener(object : View.OnClickListener {
// here I would like to move to FormActivity
override fun onClick(v: View?) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(
this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),
100
)
} else {
saveImageToStore()
}
} else {
saveImageToStore()
}
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == 100) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
saveImageToStore()
} else {
Toast.makeText(this, "ASDASDA", Toast.LENGTH_SHORT).show()
}
}
}
使用 requireContext()
而不是 this
。片段不是上下文。您需要使用 requireContext()
而不仅仅是 context
,因为 context
是可以为 null 的 Context?
。在 onActivityCreated()
函数中使用不可为 null 的 requireContext()
是安全的。
您需要更换:
ContextCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
通过
ContextCompat.checkSelfPermission(requireContext(),android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
和
ActivityCompat.requestPermissions(
this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),100)
来自
ActivityCompat.requestPermissions(
requireActivity(), arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),100)
ContextCompat.checkSelfPermission()
需要上下文引用作为第一个参数,并且您正在使用 'this'
ActivityCompat.requestPermissions()
需要一个 activity 引用作为第一个参数,并且您正在使用 'this' 传递片段引用
您应该尝试使用 registerForActivityResult(RequestPermission())
在运行时请求权限的新方法
https://developer.android.com/training/permissions/requesting#request-permission