Hilfe beim Auslesen einer Arraylist mit einem Hashmap Inhalt

  • Antworten:5
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 27

14.06.2018, 11:58:16 via Website

image

Kann mir jemand sagen wie ich diese ArrayListe am Besten auslesen kann?
Ich möchte am Ende gerne eine Zuordnung machen können, z.B.

String username = xxx.("username");
int strs = xxx.("stars");

etc.

Danke für die Hilfe!

Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

14.06.2018, 12:28:30 via Website

Hallo yugox,

Eventell wäre es Sinvoll für deine Datenstruktur die HashMap durch ein Objekt zu ersetzen, dann kannst du per xxx.getUsername() oder xxx.getStars() darauf zugreifen.

Was ist denn sonst das Problem dabei?

lesen des ersten Elements:

String username = myArrayList.get(0).get("username");

Aber wie gesagt, ein Objekt erfüllt da besser die Erwartungen und ist id.r. auch einfacher zu benutzen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 27

14.06.2018, 12:40:48 via Website

Danke für den Tipp, muss mir dann damit überlegen wie ich das am Besten mache. Hast Du sonst einen "schnelleren" Weg um das Problem zu lösen?

Ich versuche gerade die Daten aus der firebase irgendwie "DESC" zu sortieren, ich weiß aber nicht was der Beste weg wäre.

Momentan sieht es so aus:

myRef.addChildEventListener(new ChildEventListener() {
        int i = 1;
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

          HashMap<String, String> value = (HashMap<String, String>;) dataSnapshot.getValue();

            String username = dataSnapshot.child("username").getValue(String.class);
            int stars = dataSnapshot.child("stars").getValue(Integer.class);
            int highScore = dataSnapshot.child("highScore").getValue(Integer.class);

            TableRow tr = new TableRow(cx);
            TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT);
            lp.gravity = Gravity.CENTER;

            TextView tvRank = new TextView(cx);
            tvRank.setTextColor(Color.WHITE);
            tvRank.setTextSize(12);
            tvRank.setText(String.valueOf(i));
            tvRank.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 0.2f));
            tvRank.setGravity(Gravity.CENTER);

            TextView tvUsername = new TextView(cx);
            tvUsername.setTextColor(Color.WHITE);
            tvUsername.setTextSize(12);
            tvUsername.setText(username);
            tvUsername.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 0.4f));
            tvUsername.setGravity(Gravity.CENTER);

            TextView tvStars = new TextView(cx);
            tvStars.setTextColor(Color.WHITE);
            tvStars.setTextSize(12);
            tvStars.setText(String.valueOf(stars));
            tvStars.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 0.2f));
            tvStars.setGravity(Gravity.CENTER);

            TextView tvHighScore = new TextView(cx);
            tvHighScore.setTextColor(Color.WHITE);
            tvHighScore.setTextSize(12);
            tvHighScore.setText(String.valueOf(highScore));
            tvHighScore.setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 0.2f));
            tvHighScore.setGravity(Gravity.CENTER);
            tr.setLayoutParams(lp);
            tr.addView(tvRank);
            tr.addView(tvUsername);
            tr.addView(tvStars);
            tr.addView(tvHighScore);

            onlineRankingList.addView(tr);

            i++;
        }
Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 27

14.06.2018, 19:05:39 via Website

Danke dafür, ich habe es nun hinbekommen, auch wenn der Code meiner Meinung nach echt bescheiden ist... :-(

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.243

14.06.2018, 20:30:12 via Website

Du kannst Daten aus Firebase doch auch in ein Custom Objekt deserialisieren, statt mit diesen generischen Strukturen zu arbeiten. Firebase SDK macht das (ähnlich wie GSON) komplett automatisch, du musst nur eine Datenklasse schreiben, die exakt zur Struktur aus dem JSON (bzw. dem was du im Debugger siehst) passt.

MeineTolleDatenKlasse data = snapshot.getValue(MeineTolleDatenKlasse.class);

Siehe z.B. hier:

https://stackoverflow.com/questions/39969818/how-to-deserialize-nested-firebase-database-in-java-with-mapstring-obect-or-l

— geändert am 14.06.2018, 20:31:18

Hilfreich?
Diskutiere mit!

Empfohlene Artikel