首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科特林的registerForActivityResult和onActivityResult onActivityResult

科特林的registerForActivityResult和onActivityResult onActivityResult
EN

Stack Overflow用户
提问于 2021-12-01 16:01:22
回答 1查看 1.8K关注 0票数 0

我目前正在尝试学习一步一步的教程,以上传图像或文件到我的服务器,同时使用截取。本教程有点过时,我真的不明白如何解决这些问题。

本教程

  1. onActivityResult(Int, Int, Intent?): Unit' is deprecated. Deprecated in Java
  2. Fragment is attempting to registerForActivityResult after being created. Fragments must call registerForActivityResult() before they are created (i.e. initialization, onAttach(), or onCreate()).

我的代码

代码语言:javascript
复制
//Uploading Photos
    private fun launchGallery() {
        val intent = Intent(Intent.ACTION_PICK)
        intent.type = "image/*"
        var resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            if (result.resultCode == Activity.RESULT_OK) {
                // There are no request codes
                val data: Intent? = result.data
            }
        }
    }

    private fun uploadImage() {
        imageData?: return
        val request = object : VolleyFileUploadRequest(
            Request.Method.POST,
            postURL,
            {
                println("response is: $it")
            },
            {
                println("error is: $it")
            }
        ) {
            override fun getByteData(): MutableMap<String, FileDataPart> {
                var params = HashMap<String, FileDataPart>()
                params["imageFile"] = FileDataPart("image", imageData!!, "jpeg")
                return params
            }
        }
        Volley.newRequestQueue(requireContext()).add(request)
    }

    @Throws(IOException::class)
    private fun createImageData(uri: Uri) {
        val inputStream = requireContext().contentResolver.openInputStream(uri)
        inputStream?.buffered()?.use {
            imageData = it.readBytes()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (resultCode == Activity.RESULT_OK && requestCode == IMAGE_PICK_CODE) {
            val uri = data?.data
            if (uri != null) {
                imageView.setImageURI(uri)
                createImageData(uri)
            }
        }
        super.onActivityResult(requestCode, resultCode, data)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-01 18:05:57

您正在尝试从一个方法“registerForActivityResult ()”(这不是它应该做的方法)开始,"registerForActivityResult“应该在活动/片段onCreate函数中初始化,然后您可以使用"resultLauncher”变量来打开图片库/摄像机等等……

另外,当您使用"registerForActivityResult“时,您不需要覆盖"onActivityResult”(现在已不再推荐)。

检查活动结果以更好地理解新api的工作原理。

这里是一个很好的教程,它向您展示如何使用Android活动结果API来选择和拍摄图像。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70187420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档