首页 > 解决方案 > Kotlin 将图像和描述上传到 Firebase

问题描述

我正在尝试将手机图库中的图片和图片的简短描述上传到 Firebase。当我单击“添加帖子”按钮时,它应该将我发送到我选择图像的画廊,然后,它需要描述并且可以发布。问题是,当我单击“添加帖子”按钮时,它不会打开厨房,但会显示“没有应用程序可以执行此操作”

错误

块引用

包 com.giveandshareauth

导入 androidx.appcompat.app.AppCompatActivity

类 PostActivity : AppCompatActivity() {

private var myUrl = ""
private var imageUri: Uri? = null
private var storagePostImages: StorageReference? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_post)

    storagePostImages = FirebaseStorage.getInstance().reference.child("Post Pictures")

    save_post_btn.setOnClickListener{ uploadImage()}

    CropImage.activity()
            .setAspectRatio(2, 1)
            .start(this)



}




override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE  &&  resultCode == Activity.RESULT_OK  &&  data != null)
    {
        val result = CropImage.getActivityResult(data)
        imageUri = result.uri
        PostImage.setImageURI(imageUri)
    }
}

private fun uploadImage() {
    when
    {
        imageUri == null -> Toast.makeText(this, "Please select image first.", Toast.LENGTH_LONG).show()
        TextUtils.isEmpty(PostInfo.text.toString()) -> Toast.makeText(this, "Please write description.", Toast.LENGTH_LONG).show()

        else -> {
            val progressDialog = ProgressDialog(this)
            progressDialog.setTitle("Upload Post")
            progressDialog.setMessage("Please wait, we are uploading your post...")
            progressDialog.show()


            val fileRef = storagePostImages!!.child(System.currentTimeMillis().toString() + ".jpg") //GetFile Extention Buiding Function Kotlin!
            var uploadTask: StorageTask<*>
            uploadTask = fileRef.putFile(imageUri!!)

            uploadTask.continueWithTask(Continuation <UploadTask.TaskSnapshot, Task<Uri>>{ task ->
                if (!task.isSuccessful)
                {
                    task.exception?.let {
                        throw it
                        progressDialog.dismiss()
                    }
                }
                return@Continuation fileRef.downloadUrl
            }).addOnCompleteListener (OnCompleteListener<Uri> { task ->
                if (task.isSuccessful)
                {
                    val downloadUrl = task.result
                    myUrl = downloadUrl.toString()

                    val ref = FirebaseDatabase.getInstance().reference.child("Posts")
                    val postId = ref.push().key

                    val postMap = HashMap<String, Any>()
                    postMap["postid"] = postId!!
                    postMap["publisher"] = PostInfo.text.toString().toLowerCase()
                    postMap["description"] = FirebaseAuth.getInstance().currentUser!!.uid
                    postMap["postimage"] = myUrl

                    ref.child(postId).updateChildren(postMap)

                    Toast.makeText(this, "GiveAway has been updated successfully.", Toast.LENGTH_LONG).show()

                    val intent = Intent(this@PostActivity, LoginActivity::class.java)
                    startActivity(intent)

                    progressDialog.dismiss()
                }
                else
                {
                    progressDialog.dismiss()
                }
            } )
        }

    }
}

}

标签: androidfirebasekotlinfile-upload

解决方案


推荐阅读