类型不匹配:推断的类型是 <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