我无法在Fragment
中从 Firebase 检索数据。在同一Fragment
中,我可以将数据保存到 Firebase ,但是无法检索它们。然后,我打开Fragment
读取数据,它崩溃了。
我使用docRef
进行检索,并使用databaseDocumente
保存数据。
FirebaseDatabase docDatabase = FirebaseDatabase.getInstance();
DatabaseReference docRef = docDatabase.getReference();
userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
docRef.child("Docs").child(userId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for (DataSnapshot child : children){
Docum doc = child.getValue(Docum.class);
itp1.setText(doc.dataitp1);
itp2.setText(doc.dataitp2);
rca1.setText(doc.datarca1);
rca2.setText(doc.datarca2);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
final DatabaseReference databaseDocumente;
userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
databaseDocumente = FirebaseDatabase.getInstance().getReference("Docs");
salveaza = (Button) myView.findViewById(R.id.buttonsalveazadoc);
salveaza.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adaugaDate();
}
private void adaugaDate(){
String ditp1 = (String) itp1.getText().toString();
String ditp2 = (String) itp2.getText().toString();
String drca1 = (String) rca1.getText().toString();
String drca2 = (String) rca2.getText().toString();
String drov1 = (String) rov1.getText().toString();
String drov2 = (String) rov2.getText().toString();
String dmed1 = (String) med1.getText().toString();
String dmed2 = (String) med2.getText().toString();
String dsting1 = (String) sting1.getText().toString();
String dsting2 = (String) sting2.getText().toString();
if((!TextUtils.isEmpty(ditp2))&&(!TextUtils.isEmpty(drca2))){
String userID = FirebaseAuth.getInstance().getUid();
Docum documente = new Documd(itp1,ditp2,drca1,drca2,drov1,drov2,dmed1,dmed2,dsting1,dsting2);
databaseDocumente.child(userID).setValue(documente);
Toast.makeText(myView.getContext(), "Date salvate", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(myView.getContext(), "Introduceti toate datele", Toast.LENGTH_LONG).show();
}
}
});
return myView;
}
}
我遵循了教程,但没有成功。我在另一个Fragment
中做了类似的事情,还可以。在这里,我做了同样的事情,但是崩溃了。如果我使用:
docRef.child(userId).addValueEventListener
代替:
docRef.child("Docs").child(userId).addValueEventListener
该片段不会崩溃,但是字段仍然为空。 谢谢!
这是日志:LOG
答案 0 :(得分:0)
我找到了解决方案。这是工作代码:
FirebaseDatabase docDatabase = FirebaseDatabase.getInstance();
DatabaseReference docRef = docDatabase.getReference();
userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
docRef.child("docs").child(userId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Docum doc = dataSnapshot.getValue(Docum.class);
itp1.setText(doc.dataitp1);
itp2.setText(doc.dataitp2);
rca1.setText(doc.datarca1);
rca2.setText(doc.datarca2);
rov1.setText(doc.datarov1);
rov2.setText(doc.datarov2);
med1.setText(doc.datamed1);
med2.setText(doc.datamed2);
sting1.setText(doc.datasting1);
sting2.setText(doc.datasting2);
//} }
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e("firebaseerror", databaseError.toString());
}
});