Соедините userId с уникальной фотографией в Firebase - PullRequest
0 голосов
/ 30 января 2020

У меня есть приложение, в котором можно создать пользователя, и это прекрасно работает, и я счастлив!

Проще говоря, вот метод, который добавляет пользователя в базу данных Firebase:

    public void addUserInfoToDatabase(){
    String user_id = mAuth.getCurrentUser().getUid();
    final DatabaseReference the_user_database = FirebaseDatabase.getInstance().getReference().child("UserRegistraion").child(user_id);


    Map userAttributes = new HashMap();
    userAttributes.put("user_id", user_id);
    userAttributes.put("username", userName);
    userAttributes.put("name", name);
    userAttributes.put("e-mail", email);

    the_user_database.setValue(userAttributes);
    if (mRegistrationListener != null)
        mRegistrationListener.onRegistrationComplete(true); // Assumes success

}

А вот как выглядит таблица при регистрации пользователя:

User table

Что я хочу сделать сейчас, так это то, что я хотите добавить изображение профиля, которое принадлежит каждому пользователю: например, изображение профиля, семейное изображение и т. д. c.

Вопрос: как я могу сделать это в Firebase? Я не прошу никого делать это для меня, а просто дать мне хороший совет или предоставить руководство / видео о том, как это сделать.

Спасибо.

1 Ответ

1 голос
/ 30 января 2020

Я обычно создаю отдельное занятие для настройки фотографии профиля. Возможно, вместо вызова onRegistrationComplete вызовите onCompleteListener после setValue (userAttributes), например так:

the_user_database.setValue(userAttributes).addOnCompleteListener(new OnCompleteListener...){
Intent intent = new Intent(context, AddProfileActivity.class);
startActivity(intent);

В следующем упражнении это может быть простой XML макет с кнопкой и ImageView.

Этот код может открыть вашу галерею, выбрать изображение и поместить его в ваше изображение в методе onActivityResult:

private void selectPhotoFromGallery(){
        Log.d(TAG, "selectPhotoFromGallery: started");
        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, GALLERY_PICK);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == GALLERY_PICK){
            if (resultCode == RESULT_OK && data != null){
                contentUri = data.getData();
                try{
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentUri);
                    profile_photo.setImageBitmap(bitmap);
                }catch (IOException e){
                    Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }
    }

Затем вам понадобится метод для загрузки вашего изображения в FirebaseStorage и захвата downloadUrl для добавления на нужный узел. В этом случае, потому что вы добавляете в существующий узел, вы вызываете updateChildren () при добавлении фотографии профиля. Я использую метод, подобный этому:

private void uploadProfileImage(){
        Log.d(TAG, "uploadProfileImage: uploading image....");
        if (contentUri != null){
            //from gallery
            final StorageReference reference = FirebaseStorage.getInstance().getReference().child(currentUserID).child("profile_photo");
            reference.putFile(contentUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            String profilePhotoUri = uri.toString();
                            DatabaseReference publicUserReference = FirebaseDatabase.getInstance().getReference().child("public_user")
                                    .child(currentUserID);
                            HashMap hashMap = new HashMap();
                            hashMap.put("profile_photo", profilePhotoUri);
                            publicUserReference.updateChildren(hashMap).addOnCompleteListener(new OnCompleteListener() {
                                @Override
                                public void onComplete(@NonNull Task task) {
                                    if (task.isSuccessful()){
                                        Intent intent = new Intent(mContext, CompleteProfileActivity.class);
                                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                                        startActivity(intent);
                                        finish();
                                    }
                                }
                            });

                        }
                    });
                }
            });
        }
    }

Вы должны будете настроить это для ваших конкретных потребностей c, очевидно. То, что вы действительно пытаетесь сделать, это сохранить изображение в хранилище и получить строку http://..., где оно хранится, а затем вставить эту информацию в то же место, что и предыдущая информация, которую вы предоставили.

Надеюсь, это будет полезным советом. https://www.youtube.com/watch?v=mPOhnTnLcSY Это ссылка на видео о загрузке изображений в хранилище Firebase для получения дополнительной информации, если вам это нужно. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...