Erste richtige App - Eins zwei Fragen

  • Antworten:20
Florian F.
  • Forum-Beiträge: 29

01.11.2013, 21:17:34 via Website

Hi Forum,

arbeite mich gerade in die AndroidMaterie ein. Bei meinem Vorhaben stoße ich auf eins zwei Fragen.

1. Ich habe ein Bild das exakt oben (ohne Lücke) an der ActionBar kleben soll. Der ImageView sitzt in einem Relative Layout und hat immer eine Lücke. Auch viewbounds oder margin 0 haben kein verändertes Ergebnis gebracht. Das Relative Layout hat ein BackgroundImage, falls das interessant ist.

2. Ich möchte eine Art Quiz realisieren. Die Fragen sollen zufällig erscheinen. An sich weiß ich schon wie ich das mache, jedoch wollte ich mal fragen, welche Möglichkeiten ich habe die Fragen zu hinterlegen? Antworten gibt es keine. Soll ich Sie händich in die Strings einfügen? Oder mache ich eine neue XML auf die fragen.xml heißt und arbeite mit dieser weiter? Wenn ja, wie steuere ich die einzelnen Elemente an? Wenn möglich möchte ich das Thema SQL Lite umgehen, da ich vorerst sicher werden will, was die Grundfunktionen in Android angeht.

Vielen Dank

Grüße

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 08:53:12 via Website

Also nach weiterem Suchen.

Ist es sinnvoll eine JSON Datei zu schreiben in der alle Fragen aufgelistet sind? Und die Fragen dann mit Collection.shuffle() auszugeben?

Danke

Antworten
Sebastian P.
  • Forum-Beiträge: 72

02.11.2013, 11:05:28 via Website

Ich würde eher eine SQLite-Datenbank verwenden. Ist schneller als XML parsen.
1SELECT * FROM questions ORDER BY RANDOM()
...

Antworten
SvenDD
  • Forum-Beiträge: 272

02.11.2013, 11:08:45 via Website

Zu 1: Poste mal einen Screenshot, was du meinst. Evtl. sind es die Padding-Werte der obersten Ebene.

Zu 2: Wenn du keine Datenbank haben willst, dann lege alle Fragen in die strings.xml, wird aber dann evtl. zu umständlich das ganze im Code unter zu bringen. Vorteil wäre, dass du dadurch in mehrere Sprachen übersetzen musst.

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 11:21:09 via Website

Danke für die Antwort.

1. War Padding im Layout selbst. YES. Danke :)

2. Okay aber wenn ich die Fragen in die strings lege und beispielsweise 1 -2 -3-4-5 usw bennene..

Kann ich dann zum zufälligen auswählen so etwas machen = setText(@string/randomzahlvariable);

Oder wie kann ich dann zufallsgesteuert darauf zugreifen?

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

02.11.2013, 11:35:06 via App

Alle fragen in ein String array schreiben und dann mittels array[randomzal); darauf zugreifen

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

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 11:49:54 via App

komme ich bei einem string array irgendwann an eine speichergrenze ? also kann ich auch ein array mit 100 fragen haben ?

Antworten
impjor
  • Forum-Beiträge: 1.793

02.11.2013, 12:25:49 via App

Theoretisch kann eine Array nur Integer.MAX_VALUE Elemente aufnehmen.
Praktisch geht natürlich nur so viel, wie vviele im RAM der DalvikVM Platz ist. Dein Array enthält aber nur int-Werte, also nicht ganz so großer Speicherbedarf.
100 Fragen kriegst du aber locker(!) darin unter.
LG
Edit: Achja, ich würde dir empfehlen ein int-Array zu machen, mit den Werten R.string.frage1, R.string.frage2 und so weiter und die Fragen dann in der xml zu schreiben.
Sonst bietet es sich an mehrere Datenbanken zu nutzen (FragenDE, FragenEN)

— geändert am 02.11.2013, 12:28:08

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 12:38:53 via App

ah vielen dank. aber wie ungefähr läuft dann die Verknüpfung?

ich mache einen mehrdimensionalen int array? beispiel: 1 und der wert zu 1 ist ein verweis aus ein string in der fragen.xml? also 1= @string/frage1

komme noch nicht in die denke.

Antworten
impjor
  • Forum-Beiträge: 1.793

02.11.2013, 16:40:37 via App

Na, erstnal verstehe ich nicht, was du immer mit @string/xyz meinst? Das benutzt du in Java ja nicht. Stattdessen benutzt du ja die R.string.xyz - Konstanten. Wenn du das nicht wusstest, solltest du dir nochmal die Android Basics anschauen.
TextView#setText() gibt es in zwei (oder mehr) "Versionen": mit Parameter String, dann wird der String als Text gesetzt oder mit int-Parameter, dann wird dazu die entsprechende string Resource gesucht. Also z.B.
TextView#setText(R.string.hallo); dank des Arrays dann TextView#setText(array[zufallszahl]);

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 16:47:27 via Website

Ok Habe jetzt mal hier Testweise einen integer array gemacht... Fehler gibt er mir keine aus. Denke so ist es richtig - korrigiert mich, falls nicht :)


1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3 <integer-array name="randomquests">
4 <item>@string/app_name</item>
5 <item>@string/hello_world</item>
6 <item>@string/starttext</item>
7 </integer-array>
8
9</resources>

Dann versuche ich daraus eine zufällige Zahl abzulesen und in ein TextView zu füllen.

So:
1starttext.setText(R.array.randomquests[]);

Da gibt er mir allerdings Fehler aus. Anscheinend sind die [] falsch. Ist der Ansatz so korrekt? In die[] müsste dann die randomzahl rein? Wahrscheinlich aber in anderer Syntax.

— geändert am 02.11.2013, 16:48:46

Antworten
SvenDD
  • Forum-Beiträge: 272

02.11.2013, 18:02:24 via Website

Du musst einen Wert zwischen 0 und 2 schon mitgeben. Es ist ein Array und kein flacher Datentyp.

Basics Java angucken :D

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 18:09:53 via Website

ja sagte ich ja. in[] gebe ich die randomzahl mit.. Allerdings stürtzt meine App ab, wenn ich beispielsweise 2 schreibe..

also

starttext.setText(R.array.randomquests[2]);

habe nun versucht erstmal den integerarray auszulesen.aber das funktioniert auch nicht.


int[] test = getResources().getIntArray(R.array.randomquests);
starttext.setText(test[2]);

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 18:26:06 via Website

gibt keine fehlermeldung. stürtzt einfach ab die app. ...wurde angehalten.


Und beim oberen Versuchen also dem: starttext.setText(R.array.randomquests[2]);

kommt: The type of expression must be an array type.

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 18:32:20 via Website

Funktioniert nun zwar. Allerdings mit einem String Array...

1String[] some_array = getResources().getStringArray(R.array.randomquests);
2 starttext.setText(some_array[1]);

Ich werde es nun so verwenden... Das mit dem IntArray klang zwar ganz gut. aber ich kann mir nicht erklären, warum es damit nicht funktioniert.

Antworten
Michele
  • Forum-Beiträge: 1.525

02.11.2013, 18:49:07 via Website

Florian F.
gibt keine fehlermeldung. stürtzt einfach ab die app. ...wurde angehalten.


Und beim oberen Versuchen also dem: starttext.setText(R.array.randomquests[2]);

kommt: The type of expression must be an array type.

Achso eine App kann abstürzen ohne Fehlermeldung?
Sagt dir die LogCat was? Wenn du sowas nicht mal weißt, dann lass das lieber gleich
und fange nochmal kleiner an.:D

Die LogCat sagt dir immer wo dein Problem ist oder war.:D


LG

— geändert am 02.11.2013, 18:51:37

Antworten
impjor
  • Forum-Beiträge: 1.793

02.11.2013, 19:05:33 via Website

Florian F.
Funktioniert nun zwar. Allerdings mit einem String Array...

1String[] some_array = getResources().getStringArray(R.array.randomquests);
2 starttext.setText(some_array[1]);

Ich werde es nun so verwenden... Das mit dem IntArray klang zwar ganz gut. aber ich kann mir nicht erklären, warum es damit nicht funktioniert.
Damit ist die Mehrsprachen-Funktionalität aber dahin, oder wie hast du das gelöst?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Florian F.
  • Forum-Beiträge: 29

02.11.2013, 19:25:25 via Website

Habe nun ein String Array in den ich die resource pfade schreibe .. die wiederum auf die strings in der strings.xml verweisen :D

Funktioniert zumindest einwandfrei. Auch die Zufallszahl klappt..

Nur als Info:

Das was ich oben genannt hatte. collection.shuffle() funktioniert das hier auch? Oder gibt es eine einfache Lösung mit der eine Dopplung von Fragen nicht möglich ist?

Vielen Dank für die Tipps. Grüße

Antworten
SvenDD
  • Forum-Beiträge: 272

02.11.2013, 20:43:21 via Website

impjor
Florian F.
Funktioniert nun zwar. Allerdings mit einem String Array...

1String[] some_array = getResources().getStringArray(R.array.randomquests);
2 starttext.setText(some_array[1]);

Ich werde es nun so verwenden... Das mit dem IntArray klang zwar ganz gut. aber ich kann mir nicht erklären, warum es damit nicht funktioniert.
Damit ist die Mehrsprachen-Funktionalität aber dahin, oder wie hast du das gelöst?

LG

Warum? Wenn er alles in die Strings.xml reinschreibt und diese wie üblich übersetzt, sollte das doch funktionieren.

Antworten