Ich habe ein Datum wie folgt aussieht:Firebase - Abrufen von Daten in Android
{
"courses" : {
"Business" : {
"-KOBuojCGl_KVNgCx6l3" : {
"courseCode" : "BUS2202",
"courseName" : "Business Mathematics"
},
"-KOCH9RvYkwIamb0oxi8" : {
"courseCode" : "BUS2302",
"courseName" : "Business Fundamentals"
}
},
"Computing & IT" : {
"-KOBukFDN8eDjzF77haS" : {
"courseCode" : "SDT2201",
"courseName" : "System Designs"
},
"-KOBuriS_C5njfhAkV_P" : {
"courseCode" : "SDT3201",
"courseName" : "Computer Project"
},
"-KOD-E81rtXhzEmSeRPx" : {
"courseCode" : "SDT2202",
"courseName" : "System Designs Year 2"
},
}
}
}
Und ein UI sieht wie folgt aus:
Wenn Benutzer wählen Business-Grundlagen, textview1
sollte BUS2302 anzeigen und textview2
sollte Business Fundamentals anzeigen.
Codes Ich versuche jetzt:
public class MainActivity extends AppCompatActivity{
private TextView tv1, tv2;
private DatabaseReference mRef;
private String code, name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRef = FirebaseDatabase.getInstance().getReference().child("courses").child("Business");
tv1 = (EditText) findViewById(R.id.textview1);
tv2 = (EditText) findViewById(R.id.textview2);
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
CourseDetails courseDetails = dataSnapshot.getValue(CourseDetails.class);
code = courseDetails.getCourseCode();
name = courseDetails.getCourseName();
tv1.setText(code);
tv2.setText(name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
CourseDetails
Klasse:
public class CourseDetails {
private String courseCode;
private String courseName;
public CourseDetails() {
}
public CourseDetails(String courseCode, String courseName) {
this.courseCode = courseCode;
this.courseName = courseName;
}
public String getCourseCode() {
return courseCode;
}
public void setCourseCode(String courseCode) {
this.courseCode = courseCode;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
}
Wenn ich die Codes laufen, sowohl die Textviews nur leer, und keine Fehlermeldung. Als ich mRef
ValueEventListener dazu geändert:
mRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
tv1.setText(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Die ganze JSON-Daten in textview1
ausgedruckt, so dass ich weiß, dass meine Daten da ist. Aber wenn ich getCourseCode()
und getCourseName()
verwende, sind die Textansichten leer. Irgendwelche Vorschläge?
Ich habe eine andere Frage, welche die Codes verwendet werden, um die push key
eines Kurses zu bekommen, dann zeigen Sie nur den Kurscode und den Namen entsprechend an. Die Frage kann here
Versuchen Sie, in CourseDetails-Klasse für CourseCode und CourseName in den öffentlichen Modifikator statt privat zu ändern. – 0p3n5ourcE
noch leer nach dem Ändern der öffentlichen –
Wo ist die Schaltfläche, wo der Benutzer den Kursnamen auswählt? – Wilik