You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase图片上传存URL后自动跳转至BottomNavigation问题求助

问题描述

我用Kotlin开发的App实现了将图片上传至Firebase Storage,上传完成后将图片URL存入Firebase Realtime Database以备后续使用。所有功能均正常,唯独在图片URL存入数据库后,App会自动跳转到BottomNavigationActivity。下面是相关代码,我是Kotlin新手,麻烦帮忙排查,感谢。

跳转至PictureTakingActivity的Adapter类

class PrintAdapter(val data: ArrayList<PrintModel>) : RecyclerView.Adapter<PrintAdapter.MyViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        var view = LayoutInflater.from(parent.context).inflate(R.layout.single_row_home, parent, false)
        return MyViewHolder(view)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.name.setText(data.get(position).name)
        Picasso.get().load(data[position].image).into(holder.image)
        Log.d("TAG", "The image is: " + data[position].catName)
        var cat = data.get(position).catName

        holder.itemView.setOnClickListener{
            if (cat.equals("photo")){
                val intent = Intent(it.context, PictureTakingActivity::class.java)
                it.context.startActivity(intent)
            }
        }
    }

    override fun getItemCount(): Int {
        return data.size
    }

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        // Both of these can be used to find id
        var name: TextView = itemView.findViewById(R.id.printName)
        var image = itemView.findViewById<ImageView>(R.id.circleImageView1)
    }
}

PictureTakingActivity

class PictureTakingActivity : AppCompatActivity() {
    lateinit var uri: Uri
    lateinit var binding: ActivityPictureTakingBinding
    lateinit var databaseReference: DatabaseReference
    lateinit var firebaseUser: FirebaseUser
    lateinit var id: String

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityPictureTakingBinding.inflate(layoutInflater)
        setContentView(binding.root)

        databaseReference = FirebaseDatabase.getInstance().reference
        firebaseUser = FirebaseAuth.getInstance().currentUser!!
        id = firebaseUser.uid

        binding.takePhoto.setOnClickListener {
            ImagePicker.with(this)
                .crop()
                .galleryMimeTypes(
                    mimeTypes = arrayOf(
                        "image/png",
                        "image/jpg",
                        "image/jpeg"
                    )
                )
                .cameraOnly()
                .compress(1024)
                .maxResultSize(1080, 1080)
                .start()
        }

        binding.uploadGallery.setOnClickListener {
            ImagePicker.with(this)
                .crop()
                .galleryMimeTypes(
                    mimeTypes = arrayOf(
                        "image/png",
                        "image/jpg",
                        "image/jpeg"
                    )
                )
                .galleryOnly()
                .compress(1024)
                .maxResultSize(1080, 1080)
                .start()
        }

        binding.ok.setOnClickListener {
            uploadImage()
        }
        binding.notOk.setOnClickListener {
            ImagePicker.with(this)
                .crop()
                .galleryMimeTypes(
                    mimeTypes = arrayOf(
                        "image/png",
                        "image/jpg",
                        "image/jpeg"
                    )
                )
                .compress(1024)
                .maxResultSize(1080, 1080)
                .start()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK) {
            //Image Uri will not be null for RESULT_OK
            uri = data?.data!!
            binding.userImage.setImageURI(uri)

            binding.takePhoto.visibility = View.INVISIBLE
            binding.uploadGallery.visibility = View.INVISIBLE

            binding.ok.visibility = View.VISIBLE
            binding.notOk.visibility = View.VISIBLE

            Log.d("TAG", "The uri inside is: $")
        } else if (resultCode == ImagePicker.RESULT_ERROR) {
            Toast.makeText(this, ImagePicker.getError(data), Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "Task Cancelled", Toast.LENGTH_SHORT).show()
        }
    }

    private fun uploadImage(){
        val progressBar = ProgressDialog(this)
        progressBar.setMessage("Uploading file...")
        progressBar.setCancelable(false)
        progressBar.show()

        val formatter = SimpleDateFormat("yyyy_MM_dd_HH_mm_ss", Locale.getDefault())
        val now = Date()
        val fileName = formatter.format(now)

        val storageRefrence = FirebaseStorage.getInstance().reference.child(id).child("images/$fileName")
        storageRefrence.putFile(uri).addOnSuccessListener {
            progressBar.dismiss()
            storageRefrence.downloadUrl.addOnSuccessListener {
                databaseReference.child("Users").child(id).child("image").setValue(it.toString()).addOnSuccessListener { 
                    // 执行完这行代码后App会跳转到BottomNavigationActivity
                    Toast.makeText(this, "File uploaded successfully", Toast.LENGTH_SHORT).show()
                }
            }
        }.addOnFailureListener{
            progressBar.dismiss()
        }
    }
}

BottomNavigationActivity

class BottomNavigationActivity : AppCompatActivity() {
    lateinit var binding: ActivityBottomNavigationBinding
    private val fragment1: Fragment = HomeFragment()
    private val fragment2: Fragment = DocumentsFragment()
    private val fragment3: Fragment = OrdersFragment()
    private val fragment4: Fragment = ProfileFragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityBottomNavigationBinding.inflate(layoutInflater)
        setContentView(binding.root)

        replaceFrameLayout(fragment1)

        binding.bottomNavigation.setOnItemSelectedListener {
            when(it.itemId){
                R.id.home -> replaceFrameLayout(fragment1)
                R.id.documents -> replaceFrameLayout(fragment2)
                R.id.orders -> replaceFrameLayout(fragment3)
                R.id.profile -> replaceFrameLayout(fragment4)
                else ->{}
            }
            true
        }
    }

    private fun replaceFrameLayout(fragment: Fragment){
        val fragmentManager = supportFragmentManager
        val fragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.replace(R.id.flFragment, fragment)
        fragmentTransaction.commit()
    }
}

内容的提问来源于stack exchange,提问作者Gum Naam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:55:22