Мне нужна помощь с моим приложением.У меня есть Activity
, где я добавляю информацию о пользователе, такую как имя, день рождения и добавляю изображение профиля для пользователя.И когда я добавляю изображение профиля, я получаю это в своей базе данных:
И это работает нормально.Я использую ModelClass, и я знаю, что когда я использую setValue
, он удаляет существующие данные под этим child
и сохраняет новые данные.Но есть ли способ просто добавить новые данные и при этом не удалять существующие данные с помощью ModelClass?Я знаю, что это работает с Hashmap
, но я хочу использовать ModelClass.
Вот моя активность для сохранения информации:
public class UserInfoActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
private CircleImageView civuserinfoprofileimage;
private EditText etuserinfofirstname, etuserinfolastname;
private Button btnbirthdaypicker, btnsaveuserinfo;
private TextView tvbirthday;
private FirebaseAuth mAuth;
private DatabaseReference UsersRef;
private StorageReference UserProfileImageRef;
private ProgressDialog loadingBar;
String currentUserID;
final static int Gallery_Pick = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_info);
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
UserProfileImageRef = FirebaseStorage.getInstance().getReference().child("profilepictures");
loadingBar = new ProgressDialog(this);
civuserinfoprofileimage = (CircleImageView)findViewById(R.id.civ_userinfoprofileimage);
etuserinfofirstname = (EditText)findViewById(R.id.et_userinfofirstname);
etuserinfolastname = (EditText)findViewById(R.id.et_userinfolastname);
btnbirthdaypicker = (Button)findViewById(R.id.btn_birthdaypicker);
tvbirthday = (TextView) findViewById(R.id.tv_birthday);
btnsaveuserinfo = (Button)findViewById(R.id.btn_saveuserinfo);
btnsaveuserinfo.setVisibility(View.INVISIBLE);
btnbirthdaypicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogFragment datePicker = new DatePickerFragment();
datePicker.show(getSupportFragmentManager(), "date picker");
}
});
btnsaveuserinfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SaveAccountSetupInformation();
}
});
civuserinfoprofileimage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, Gallery_Pick);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == Gallery_Pick && resultCode == RESULT_OK && data != null) {
Uri ImageUri = data.getData();
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1,1)
.start(this);
}
if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
{
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
loadingBar.setTitle("Profile Image");
loadingBar.setMessage("Saving profileimage");
loadingBar.show();
loadingBar.setCanceledOnTouchOutside(true);
Uri resultUri = result.getUri();
StorageReference filePath = UserProfileImageRef.child(currentUserID + ".jpg");
filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful()) {
btnsaveuserinfo.setVisibility(View.VISIBLE);
Task<Uri> result = task.getResult().getMetadata().getReference().getDownloadUrl();
result.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
final String downloadUrl = uri.toString();
UsersRef.child("profileimage").setValue(downloadUrl)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Intent selfIntent = new Intent(UserInfoActivity.this, UserInfoActivity.class);
selfIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(selfIntent);
Toast.makeText(UserInfoActivity.this, "Pofileimage saved", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
} else {
String message = task.getException().getMessage();
Toast.makeText(UserInfoActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
});
}
});
}
}
});
}
else {
Toast.makeText(UserInfoActivity.this, "Error: Image can not be cropped. Try Again.", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
}
private void SaveAccountSetupInformation() {
String firstname = etuserinfofirstname.getText().toString();
String lastname = etuserinfolastname.getText().toString();
String birthday = tvbirthday.getText().toString();
if (TextUtils.isEmpty(firstname) || TextUtils.isEmpty(lastname) || TextUtils.isEmpty(birthday)) {
Toast.makeText(this, "Please enter information..", Toast.LENGTH_SHORT).show();
} else {
FirebaseUser firebaseUser = mAuth.getCurrentUser();
String userid = firebaseUser.getUid();
User user = new User(userid, firstname, lastname, birthday);
UsersRef.setValue(user);
}
}
ModelClass:
public class User {
private String id;
private String lastname;
private String firstname;
private String birthday;
private String profileimage;
public User(String id, String lastname, String firstname, String birthday, String profileimage) {
this.id = id;
this.lastname = lastname;
this.firstname = firstname;
this.birthday = birthday;
this.profileimage = profileimage;
}
public User() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getProfileimage() {
return profileimage;
}
public void setProfileimage(String profileimage) {
this.profileimage = profileimage;
}