Почему FirebaseUser photoUrl запустить приложение не показывает? - PullRequest
0 голосов
/ 20 января 2020

Я хотел бы спросить о том, почему запускается приложение, аватар профиля FirebaseUserPhoto исчезнет?

Но если только войти или выйти, аватар профиля FirebaseUserPhoto может сохранить статус.

Если я выбрал одна фотография из мобильного хранилища для аватара, затем выйдите и войдите, аватар все тот же. Но запустите приложение, аватар исчезнет, ​​почему?

class ProfileFragment : Fragment() {

    companion object {
        val TAG = ProfileFragment::class.java.simpleName
        val instance by lazy {
            ProfileFragment()
        }
        var user:FirebaseUser? = null
        private val REQUEST_CODE_CHOOSE_AVATAR: Int = 200
//        var userPhotoUrl:Uri? = null
    }

    private lateinit var viewModel: ProfileViewModel

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.profile_fragment, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        retainInstance = true
        viewModel = ViewModelProviders.of(this).get(ProfileViewModel::class.java)
        // TODO: Use the ViewModel
        user = FirebaseAuth.getInstance().currentUser
//        userPhotoUrl = user?.photoUrl
        Picasso.get()
            .load(user?.photoUrl)
            .placeholder(R.mipmap.ic_launcher)
            .transform(CropCircleTransformation())
            .into(avatar_url)
        name.text = user?.displayName

        avatar_url.setOnClickListener {
            val intent = Intent().apply {
                type = "image/*"
                action = Intent.ACTION_GET_CONTENT
                action = Intent.ACTION_PICK
            }
            startActivityForResult(Intent.createChooser(intent,"Choose avatar"),REQUEST_CODE_CHOOSE_AVATAR)

        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_CODE_CHOOSE_AVATAR) {
            if (resultCode == RESULT_OK) {
                if (data != null) {
//                    val user = FirebaseAuth.getInstance().currentUser
                    val uri = data.data
                    val userProfileChangeRequest = UserProfileChangeRequest.Builder()
                        .setPhotoUri(uri)
                        .build()
                    user?.updateProfile(userProfileChangeRequest)
                        ?.addOnCompleteListener {
                            if (it.isSuccessful) {
                                Picasso.get()
                                    .load(user?.photoUrl)
                                    .transform(CropCircleTransformation())
                                    .into(avatar_url)

                                FirebaseFirestore.getInstance()
                                    .collection("uploadedImages")
                                    .whereEqualTo("uid",user?.uid)
                                    .addSnapshotListener { querySnapshot, firebaseFirestoreException ->
                                        if (querySnapshot != null && !querySnapshot.isEmpty) {
                                            for (doc in querySnapshot.documents) {
                                                Log.d(TAG, "uploadedImages's doc: ${doc.data}");
                                                doc.data?.set("avatarUrl", user?.photoUrl.toString())
                                            }
                                        } else {
                                            firebaseFirestoreException.toString()
                                        }
                                    }

                                FirebaseFirestore.getInstance()
                                    .collection("userData")
                                    .document(user!!.uid)
                                    .update("avatarUrl", user!!.photoUrl.toString())
                            }

                        }

                }
            }
        }
    }
}

Вход и выход, аватар по-прежнему сохраняется

enter image description here

Почему повторно запустить приложение аватар исчезнет? enter image description here

1 Ответ

0 голосов
/ 20 января 2020

решили проблему.

  override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == REQUEST_CODE_CHOOSE_AVATAR) {
                if (resultCode == RESULT_OK) {
                    if (data != null) {
    //                    val user = FirebaseAuth.getInstance().currentUser
                        val uri = data.data

                        val avatarRef = FirebaseStorage.getInstance().reference
                            .child("userAvatar")
                            .child(user!!.uid)
                            .child(uri.toString())

                        avatarRef.putFile(uri!!)
                            .continueWithTask {
                                if (!it.isSuccessful) {
                                    it.exception?.let {
                                        throw it
                                    }
                                }
                                avatarRef.downloadUrl
                            }.addOnCompleteListener {
                                if (it.isSuccessful) {
                                    val avatarDownloadUrl = it.result
                                    val userProfileChangeRequest = UserProfileChangeRequest.Builder()
                                        .setPhotoUri(avatarDownloadUrl)
                                        .build()

                                    user?.updateProfile(userProfileChangeRequest)
                                        ?.addOnCompleteListener { it1 ->
                                            if (it1.isSuccessful) {
                                                Picasso.get()
                                                    .load(user?.photoUrl)
                                                    .transform(CropCircleTransformation())
                                                    .into(avatar_url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...