Хорошо, у меня есть два действия, в основном упражнении есть кнопка с изображением, которая переводит вас на страницу профиля, где вы можете нажать на кнопку другого изображения и получить доступ к своей фотогалерее, чтобы установить изображение профиля, которое будет сохранено. в хранилище Firebase и в качестве URL-адреса в базе данных. Это все работает, проблема в том, что после того, как вы все это сделаете и вернетесь к основному действию (я переопределяю кнопку «Назад» и запускаю новое основное действие), кнопка «Изображение» показывает предыдущее изображение профиля, несмотря на то, что Log.d проверяет, чтоЯ получаю доступ к обновленному URL. Даже странно, что если я снова зайду в профиль, на нем отобразится изображение профиля обновления, а когда я снова вернусь к основному виду деятельности, новое изображение теперь будет отображаться правильно.
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
binding.activity = this
setSupportActionBar(toolbar)
val emailer=intent.getStringExtra("passemail")
val toggle = ActionBarDrawerToggle(
this, drawer_layout, toolbar, R.string.main_drawer_open, R.string.main_drawer_close)
drawer_layout.addDrawerListener(toggle)
toggle.syncState()
val profile = findViewById<de.hdodenhof.circleimageview.CircleImageView>(R.id.profilebutton)
val ref = FirebaseDatabase.getInstance().getReference("/users/$emailer")
val valueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val user = dataSnapshot.getValue(User::class.java)
Log.d("msg0 main", "image url: " + user!!.profile_pic);
if(user!!.profile_pic.length > 0){
Picasso.get().load(user!!.profile_pic).into(profile)
}
}
override fun onCancelled(databaseError: DatabaseError) {
Log.d("msg0", databaseError.message) //Don't ignore errors!
}
}
ref.addListenerForSingleValueEvent(valueEventListener)
profile.setOnClickListener {
val intent = Intent(this, ProfilePage::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.putExtra("passemail",emailer)
startActivity(intent)
}
}
}
ProfileActivity
class ProfilePage : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
private lateinit var profilepic: de.hdodenhof.circleimageview.CircleImageView
private lateinit var profileURi: Uri
private lateinit var emailz: String
private fun saveUserToDatabase(profilepicURL: String, emailer:String){
val uid = FirebaseAuth.getInstance().uid ?: ""
val ref = FirebaseDatabase.getInstance().getReference("/users/$emailer/profile_pic")
ref.setValue(profilepicURL)
.addOnSuccessListener {
Log.d("msg0", "saved pic to firebase database, $ref")
}
.addOnFailureListener{
Log.d("msg0", "failed to save pic into database, ${it.message}")
}
}
private fun chooseImage() {
val intent = Intent(Intent.ACTION_PICK)
intent.type = MediaStore.Images.Media.CONTENT_TYPE
startActivityForResult(intent, 10)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
val emailer=intent.getStringExtra("passemail")
if (requestCode == 10 && resultCode == Activity.RESULT_OK && data != null) {
profileURi = data.data
val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, profileURi)
Log.d("msg0 profileuri", profileURi.toString());
profilepic.setImageBitmap(bitmap)
uploadImagetoFirebase(emailer);
}
}
private fun uploadImagetoFirebase(emailer:String){
if(profileURi == null) return
val filename = UUID.randomUUID().toString()
val ref = FirebaseStorage.getInstance().getReference("/images/$filename")
ref.putFile(profileURi!!)
.addOnSuccessListener {
Toast.makeText(this, "Successfully uploaded image ${it.metadata?.path}", Toast.LENGTH_SHORT).show()
Log.d("msg0 upload", "image url: " + it.metadata?.path);
ref.downloadUrl.addOnSuccessListener {
Log.d("msg1 upload", "image url: " + it);
Toast.makeText(this, "File Location $it", Toast.LENGTH_SHORT).show()
saveUserToDatabase(it.toString(),emailer)
}
}
}
override fun onBackPressed() {
val intent = Intent(this, MainActivity :: class.java)
Log.d("checker2", emailz)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.putExtra("passemail",emailz)
startActivity(intent)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.profile_page)
val emailer=intent.getStringExtra("passemail")
// Initialize Firebase Auth
auth = FirebaseAuth.getInstance()
emailz = emailer
//Create Image View and set it to call upload when clicked
profilepic = findViewById<de.hdodenhof.circleimageview.CircleImageView>(R.id.img_profile)
val uid = FirebaseAuth.getInstance().uid ?: ""
val ref = FirebaseDatabase.getInstance().getReference("/users/$emailer")
val valueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val user = dataSnapshot.getValue(User::class.java)
Log.d("msg0 profile", "image url: " + user!!.profile_pic);
if(user!!.profile_pic.length > 0){
Picasso.get().load(user!!.profile_pic).into(profilepic)
}
}
override fun onCancelled(databaseError: DatabaseError) {
Log.d("msg0", databaseError.message) //Don't ignore errors!
}
}
ref.addListenerForSingleValueEvent(valueEventListener)
profilepic.setOnClickListener(View.OnClickListener { chooseImage() })
}
}
Я использую библиотеку для кнопок изображений, но эта проблема существовала до того, как я ее добавил.