#android #firebase #firebase-realtime-database
# #Android #огневая база #firebase-база данных в реальном времени
Вопрос:
Здравствуйте, я пытаюсь создать вложенный дочерний узел, но я понятия не имею, как это сделать
это мои данные
Я хочу сделать что-то вроде поддельного банка
как и в разделе «Телефон», я хочу добавить другие данные, например, «пожертвовать», а внутри него я хочу добавить узел с именем «История», например, в любое время, когда донор жертвует деньги, которые он должен хранить в истории. кто-нибудь знает, как я могу это сделать???
это мои коды
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donor__registration);
doname=(EditText)findViewById(R.id.editname);
dopass=(EditText)findViewById(R.id.editpass);
docon=(EditText)findViewById(R.id.editcon);
dophone=(EditText)findViewById(R.id.editphone);
doemail=(EditText)findViewById(R.id.editemail);
btn_register=(Button)findViewById(R.id.button2);
myref1= FirebaseDatabase.getInstance().getReference("Donors");
firebaseAuth =FirebaseAuth.getInstance();//d
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String do_name=doname.getText().toString();
String do_pass=dopass.getText().toString();
String do_con=docon.getText().toString();
String do_phone=dophone.getText().toString();
String do_email=doemail.getText().toString();
//validation
if(do_name.equals(""))
doname.setError("User name Should not be empty");
else if(do_pass.equals(""))
dopass.setError("Password Should not be empty");
else if(do_con.equals(""))
docon.setError("Confirm Password Should not be empty");
else if(do_phone.equals(""))
dophone.setError("Phone Should not be empty");
else if(do_email.equals(""))
doemail.setError("Email Should not be empty");
else if(!do_pass.equals(do_con))
docon.setError("Password and Confirm password should match");
else if(do_pass.length()<8)
dopass.setError("Password Should be at least 8 charaters");
else if(do_phone.length()<8)
dophone.setError("Phone number should be 8 digits");
else if(!do_phone.startsWith("7")amp;amp; !do_phone.startsWith("9"))
dophone.setError("Should Start with 7 or 9");
else if(!do_email.matches(emailpattern))
doemail.setError("Email Should be correct");
//else
else {
//
myref1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
int flag = 0;
for (DataSnapshot d : snapshot.getChildren()) {
Donors ado = d.getValue(Donors.class);
if (ado.d_email.equalsIgnoreCase(do_email)) {
flag = 1;
Toast.makeText(Donor_Registration.this, "Donor already exists", Toast.LENGTH_LONG).show();
}
}
if (flag == 0) {
//
firebaseAuth.createUserWithEmailAndPassword(doemail.getText().toString(),dopass.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(Donor_Registration.this,"Donor registered",Toast.LENGTH_LONG).show();
}
// else
// {
// Toast.makeText(Donor_Registration.this,task.getException().getMessage(),Toast.LENGTH_LONG).show();
// }
}
});
Donors ado = new Donors(do_name, do_pass, do_phone, do_email);
String id = myref1.push().getKey();
myref1.child(id).setValue(ado);
Toast.makeText(Donor_Registration.this, "Donor registered", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
});
}
Комментарии:
1. вы можете напрямую использовать дочерний узел
2. да, но донор будет жертвовать много раз, я хочу, чтобы что-то помогло мне… как я хочу, чтобы каждый раз, когда этот донор будет жертвовать, он должен сохранять его в истории
3. например, у меня есть (донор) в side, у меня должна быть (информация о доноре) внутри него, его информация, и я хочу (история) внутри нее каждый раз, когда этот донор будет жертвовать, он должен хранить ее там
4. Вы хотите добавить данные,
d_phone
верно?5. нет, я хочу добавить что-то, что называется пожертвованием или историей
Ответ №1:
Ваш код устанавливает весь узел-донор.
FirebaseReference donorsNode = FirebaseDatabase.getInstance().getReference("Donors");
FirebaseReference donorNode = donorsNode.child(donorId);
donorNode.setValue(entireDonorValue);
Чтобы обновить его с помощью пожертвования, просто установите дочерний узел внутри существующего узла-донора.
FirebaseReference donorsNode = FirebaseDatabase.getInstance().getReference("Donors");
FirebaseReference donorNode = donorsNode.child(donorId);
FirebaseReference donationsNode = donorNode.child("Donations");
FirebaseReference donationNode = donationsNode.child(donationId);
donationNode.setValue(donationValue);