Zufälliges Auslesen von String Arrays

  • Antworten:7
Tom
  • Forum-Beiträge: 9

29.06.2013, 17:21:54 via Website

Hi Leute,

ich habe momenten ein String Array mit den IDs all meiner Bilder meiner SD Karte.
1String[] picIDs= { MediaStore.Images.Thumbnails._ID };

Nun möchte ich aus diesem Array zufällig 2 Bild IDs rauswählen und in nem neuen Array speichern und das dann weiterleiten.
Versuche mit ner for Schleife und nem neuen Array der Länge 2 haben zu ner ArrayIndexOutOfBounds Exception geführt.
1String[] shuffledIDs = new String[1];
2for (int i = 0; i < 1; i++) {
3shuffledIDs(i) = picIDs()i;
4}
(musste die [i] Klammern wegen der Forum Formatierung ändern.)

Das Thema Zufallsgenerator ist hier obsolet, der steht schon.


Ich steh irgendwie am Schlauch grade.

— geändert am 29.06.2013, 17:27:30

Antworten
Christian
  • Forum-Beiträge: 307

29.06.2013, 19:39:10 via Website

Hi Tom,

ähm fehlt da nicht irgenwie ne Datenbankabfrage?

Weil in dem Array picIDs stehen nicht automatisch alle IDs nur weil du das hier machst:
1String[] picIDs= { MediaStore.Images.Thumbnails._ID };

Achso und dein Array shuffledIDs hat aber nicht die Länge 2.(jedenfalls nach deinem Code-Snippet)

Mfg Christian

Antworten
Tom
  • Forum-Beiträge: 9

29.06.2013, 20:14:41 via Website

Hi Christian,

ja ich arbeite da noch mit einem Cursor

1cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, picIDs, null, null, null);
2
3 columnIndex = cursor .getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);

Habe das aus nem Tutorial, und mir ist die ganze Cursor Geschichte noch relativ unklar, was ich für Daten wie rauslesen kann.

Antworten
Christian
  • Forum-Beiträge: 307

29.06.2013, 20:22:07 via Website

Ok hat sich jetzt dein Problem gelöst?

Antworten
Tom
  • Forum-Beiträge: 9

29.06.2013, 21:31:23 via Website

Leider noch nicht. Ich habe also einen Cursor der auf die verschiedenen Bild-Daten zeigt.

Wie kriege ich daraus jetzt 2 zufällige Bilder (sprich: Ressourcen ID etc. die ich meinem GridLayout übergebe)?

Antworten
Aaron B.
  • Forum-Beiträge: 206

04.07.2013, 14:27:35 via App

Lieber Tom

Tom

1String[] shuffledIDs = new String[1];
2for (int i = 0; i < 1; i++) {
3shuffledIDs(i) = picIDs()i;
4}

Müsste es nicht i <= 1 heißen? Schließlich möchtest du ja 2 Werte auslesen, wenn ich das so richtig verstanden habe.

LG

Antworten
Christian
  • Forum-Beiträge: 307

04.07.2013, 14:56:14 via Website

@Tom:

Wie kriege ich daraus jetzt 2 zufällige Bilder (sprich: Ressourcen ID etc. die ich meinem GridLayout übergebe)?
Idee:
Mittels der Abfrage liesst du alle Bilder IDs aus der DB. Dann ermittelst mit (getCount()) die "Anzahl der Zeilen" im Cursor. Dann erstellt du zwei Zufallszahle wobei die Unteregrenzen 0 und die Obere die "Anzahl der Zeilen" sein sollte. Zum Schluss musst du den Cursor mittels movetoPosition(zufallsZahl) an die Position der Bild ID bringen und sie auslesen.

Keine Ahnung ob das so geht aber du kannst es ja mal versuchen.

@Aaron B.:

Müsste es nicht i <= 1 heißen?

Nein das würde dazu führen das die Schleife eine Exception wirft.

Schau mal:
1String[] kl = new String[1]; //das Array hat die Länge 1
2kl[0] = "as";
3kl[1] = "ss"; //Dieser Aufruf verursacht eine java.lang.ArrayIndexOutOfBoundsException: 1

— geändert am 04.07.2013, 14:57:34

Antworten
Lukas Trümper
  • Forum-Beiträge: 12

05.07.2013, 14:51:01 via Website

Hallo Tom,

Lass dir einfach zwei zufällige Zahlen zwischen 0 und der Länge deines Arrays - 1 ziehen und dann nimm das Bild an der Stelle des Arrays und speichere es in einem neuen Array. Mit der For-Schleife ist doch schonmal ein guter Ansatz.

1String[] picIDs= { MediaStore.Images.Thumbnails._ID };
2String[] shuffledIDs = new String[2];
3
4for (int i = 0; i < 2; i++) {
5int stelle = (int) (Math.random() * (picIDs.length - 1) + 0);
6shuffledIDs(i) = picIDs(stelle);
7}


und jetzt kannst du dein Array shuffledIDs einfach übergeben. :-)

— geändert am 05.07.2013, 15:00:51

Antworten