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
相关产品推荐
相关产品推荐

