Вместо обновления данных пользователя данные удаляются из базы данных - PullRequest
0 голосов
/ 13 декабря 2018

Я создал систему входа в систему, используя Firebase, и на странице профиля я получил данные пользователя из Firebase. Затем я создал страницу редактирования профиля для своего пользователя, где пользователь может редактировать информацию и изображение профиля, но здесь моя проблема

Когда пользователь нажимает кнопку сохранения, весь узел этого конкретного пользователя удаляется из firebase. Вот мой код для

edit profile.java

 public class ProfileEditInfo extends AppCompatActivity {
private EditText newUserName, newUserEmail, newUserPhone;
private Button save;
private DatabaseReference databaseReference;
private FirebaseAuth firebaseAuth;
private FirebaseDatabase firebaseDatabase;
private ImageView updateProfilePic;
private static int PICK_IMAGE = 123;
Uri imagePath;
private StorageReference storageReference;
private FirebaseStorage firebaseStorage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile_edit_info);
    updateProfilePic = findViewById(R.id.ivProfileUpdate);
    newUserName = findViewById(R.id.etNameUpdate);
    newUserEmail = findViewById(R.id.etEmailUpdate);
    newUserPhone = findViewById(R.id.etPhoneUpdate);
    save = findViewById(R.id.btnSave);
    databaseReference= FirebaseDatabase.getInstance().getReference("users");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    firebaseAuth = FirebaseAuth.getInstance();
    firebaseDatabase = FirebaseDatabase.getInstance();
    String userID = firebaseAuth.getUid();
    firebaseStorage = FirebaseStorage.getInstance();

    storageReference = FirebaseStorage.getInstance().getReference();

    final StorageReference storageReference = firebaseStorage.getReference();
    storageReference.child("images").child(firebaseAuth.getUid() + "." + "jpg").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            Picasso.get().load(uri).fit().centerCrop().into(updateProfilePic);
        }
    });

    // final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users").child(userID);
    databaseReference.child(userID).addListenerForSingleValueEvent(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Users userProfile = dataSnapshot.getValue(Users.class);

            newUserName.setText(userProfile.getName());
            newUserPhone.setText(userProfile.getPhone());
            newUserEmail.setText(userProfile.getEmail());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(ProfileEditInfo.this, databaseError.getCode(), Toast.LENGTH_SHORT).show();
        }

    });



    save.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            String name = newUserName.getText().toString();
            String phone = newUserPhone.getText().toString();
            String email = newUserEmail.getText().toString();
            //     Users userProfile = new Users(name, phone, email);
            //     databaseReference.setValue(userProfile);




            String id = firebaseAuth.getCurrentUser().getUid();
            Users user = new Users(id,name, email, phone);
            databaseReference.child(id).setValue(user);

            StorageReference imageReference = storageReference.child("images").child(firebaseAuth.getUid() + "." + "jpg");  //User id/Images/Profile Pic.jpg
            UploadTask uploadTask = imageReference.putFile(imagePath);

            uploadTask.addOnFailureListener(new OnFailureListener() {
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(ProfileEditInfo.this, "Upload failed!", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(ProfileEditInfo.this, DisplayProfile.class));
                    finish();
                }

            }).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                    Toast.makeText(ProfileEditInfo.this, "Upload successful!", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(ProfileEditInfo.this, DisplayProfile.class));
                    finish();

                }

            });

            finish();
        }
    });

    updateProfilePic.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Image"), PICK_IMAGE);

        }

    });


}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == PICK_IMAGE && resultCode == RESULT_OK && data.getData() != null) {
        imagePath = data.getData();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imagePath);
            updateProfilePic.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    super.onActivityResult(requestCode, resultCode, data);
} 
}

Код для users.java здесь

Users.java

   package com.example.deepak.myapplication;

public class Users {  
public String imageUrl;
public String imageName;
public String uid;
public String name;
public String email;
public String password;
public String phone;

public Users(){}

public Users(String id, String name, String phone, String email){}
public Users(String uid, String name, String email, String password, String phone) {
    this.uid = uid;
    this.name = name;
    this.email = email;
    this.password = password;
    this.phone = phone;
}

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone = phone;
}
}

Структура базы данных здесь

База данных Strcuture

Когда я нажимаю на информацию о редактировании, я могу получить все данные в текстовом поле редактирования, но как только я редактирую данные и нажимаю кнопку сохранения, весь узел идентификатора пользователя, с помощью которого я создаю пользователя, удаляется.и тогда я получаю исключение нулевого указателя

Так что, пожалуйста, помогите мне и дайте мне знать, где я иду не так Спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Firebase требует, чтобы на каждом узле было по крайней мере один дочерний элемент с ключом и значением . Оба .Наличие только ключа без значения в качестве дочернего или вообще без дочернего элемента приведет к удалению всего узла.Я предлагаю вам убедиться, что объект пользователя имеет значения, установленные перед сохранением его в Firebase.

PS: m с помощью приложения StackExchange на Android и не могу придумать способ добавления комментариев, иначе wud hav добавил это как единое целое.Кто-нибудь сталкивается с этим?

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