Hilfe beim Auslesen einer Arraylist mit einem Hashmap Inhalt

  • Antworten:5
yugox
  • 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!

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

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?
Kommentieren
yugox
  • 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?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.06.2018, 13:00:18 via App

Wie wäre es mit erst alle Daten selber sammeln und dann reverse bzw. Collection.sort?
Mit einem passenden Objekt kein Problem.

Zudem: https://stackoverflow.com/a/46486441

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

Hilfreich?
yugox
Kommentieren
yugox
  • 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?
Kommentieren
Rafael K.
  • Forum-Beiträge: 2.359

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?
Pascal P.
Kommentieren