2016-08-07 21 views
2

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:

enter image description here

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

+0

Versuchen Sie, in CourseDetails-Klasse für CourseCode und CourseName in den öffentlichen Modifikator statt privat zu ändern. – 0p3n5ourcE

+0

noch leer nach dem Ändern der öffentlichen –

+0

Wo ist die Schaltfläche, wo der Benutzer den Kursnamen auswählt? – Wilik

Antwort

1

In Ihrem MainActivity für MRef es Referenz bis Knoten Geschäft der Datenbank gefunden werden, die zwei weitere Kinder mit Tasten hat, die ich denke, sind Push erzeugt. Also, ich denke, du musst über seine Kinder iterieren. Können Sie so etwas wie unten probieren:

mRef.addValueEventListener(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    // for each children 
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 

     CourseDetails courseDetails = snapshot.getValue(CourseDetails.class); 
     code = courseDetails.getCourseCode(); 
     name = courseDetails.getCourseName(); 
     tv1.setText(code); 
     tv2.setText(name); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

}

Wenn dies etwas gibt Ergebnis abgesehen von null, kann dann in Abbildung Textviews mit jeweils zu Schlüssel arbeiten.

+0

Danke. Jetzt gibt es endlich Daten, die zeigen. Stört es dich, meine andere Frage [hier] (http://stackoverflow.com/questions/38808970/android-get-push-key-based-on-a-child-firebase/38809229#38809229) zu überprüfen? –

+0

Ich bin froh, dass ich helfen konnte. Ich bin verwirrt, ist dein anderes Problem schon gelöst? – 0p3n5ourcE

+0

Ja. Gerade realisiert schon gelöst. Vielen Dank –

Verwandte Themen