Brauche hilfe bei Android Quiz app

  • Antworten:15
florian
  • Forum-Beiträge: 8

13.03.2014, 15:16:58 via Website

Hallo,
ich lerne grad das programmieren bei android ich versuche mich grad an eine quiz app sie läuft auch soweit aber wenn ich auf die antwort klicke passiert nichts aber ich will ja das eine neue antwort kommt

Antworten
Stefan
  • Forum-Beiträge: 1.560

13.03.2014, 15:22:58 via Website

[ironie]Unsere Glaskugel ist momentan wegen sibirischen Sonnenstürmen gestört. Leider können wir dir gerade nicht helfen.[/ironie]

Wie sollen wir denn bitte helfen, wenn wir den Quellcode nicht kennen und nicht wissen, was du programmiert hast?

ALLERGIKERINFO:
Beiträge können Spuren von Humor, Ironie, Sarkasmus und Erdnüssen enthalten.

Antworten
florian
  • Forum-Beiträge: 8

13.03.2014, 15:28:09 via Website

ups ^^

1package de.florian.spiel;
2
3import android.app.Activity;
4import android.os.Bundle;
5import android.view.Menu;
6import android.view.View;
7import android.widget.Button;
8
9
10public class MainActivity extends Activity
11implements android.view.View.OnClickListener {
12 Spiellogik spiel;
13
14
15
16
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_main);
22
23 //Spiellogik istanziieren
24 spiel = new Spiellogik();
25 //Antwort-Buttons mit Ereignislistener verbinden
26 for (int n = 1; n <= 4; n++) {
27 Button btn = null;
28
29
30
31 switch (n) {
32 case 1:
33 btn = (Button) this.findViewById(R.id.antwort1);
34 btn.setOnClickListener(this);
35 break;
36 case 2:
37 btn = (Button) this.findViewById(R.id.antwort2);
38 btn.setOnClickListener(this);
39 break;
40 case 3:
41 btn = (Button) this.findViewById(R.id.antwort3);
42 btn.setOnClickListener(this);
43 break;
44 case 4:
45 btn = (Button) this.findViewById(R.id.antwort4);
46 btn.setOnClickListener(this);
47 break;
48 }
49 }
50
51 //1.Frage laden
52 spiel.fragen[spiel.aktFrage].anzeigen(this);
53 }
54
55 public void OnClick(View v) {
56 int id = v.getId();
57 if (id == R.id.antwort1)
58 spiel.auswerten(1, this);
59 // spielAuswerten(1);
60 else if (id == R.id.antwort2)
61 spiel.auswerten(2, this);
62 // spielAuswerten(2);
63 else if (id == R.id.antwort3)
64 spiel.auswerten(3, this);
65 // spielAuswerten(3);
66 else if (id == R.id.antwort4)
67 spiel.auswerten(4, this);
68 // spielAuswerten(4);
69
70 }
71
72
73
74
75
76
77
78 @Override
79 public boolean onCreateOptionsMenu(Menu menu) {
80 // Inflate the menu; this adds items to the action bar if it is present.
81 getMenuInflater().inflate(R.menu.main, menu);
82 return true;
83 }
84
85 @Override
86 public void onClick(View arg0) {
87 // TODO Auto-generated method stub
88
89 }
90
91}
das ist die MainActivity

1package de.florian.spiel;
2
3import de.florian.spiel.R.id;
4import android.app.Activity;
5import android.widget.Button;
6import android.widget.Toast;
7
8
9class Spiellogik {
10final int ANZAHL_FRAGEN = 8;
11Frage[] fragen = new Frage [ANZAHL_FRAGEN];
12byte aktFrage = 0;
13int gewinnstufe = 0;
14
15
16
17
18
19
20
21Spiellogik(){
22//Fragen erzeugen
23fragen[0] =
24new Frage("Wer wohnt bei Sheldon?",
25"Penny", "Howard", "Lennard", "niemand", 3);
26
27fragen[1] =
28new Frage("Was sagt Sheldon wenn er ein Witz macht",
29"War ein Witz", "Joke", "Spaß", "Bazinga", 4);
30
31// und so fort
32
33}
34void auswerten(int schalter, Activity MainActivity) {
35
36
37
38
39if (!fragen[aktFrage].richtig(schalter)) {
40 //falsche Antwort
41 if(gewinnstufe == 0){
42 Toast.makeText(MainActivity, "Leider Falsch",
43 Toast.LENGTH_LONG).show();
44
45 }
46 else{
47 String str = "Sie haben Gewinnstufe " + gewinnstufe + "eirreicht! :)";
48 Toast.makeText(MainActivity, str, Toast.LENGTH_LONG).show();
49 }
50 //Schalter deaktivieren
51 ((Button) MainActivity.findViewById(id.antwort1)).setEnabled(false);
52 ((Button) MainActivity.findViewById(id.antwort2)).setEnabled(false);
53 ((Button) MainActivity.findViewById(id.antwort3)).setEnabled(false);
54 ((Button) MainActivity.findViewById(id.antwort4)).setEnabled(false);
55
56} else {
57
58
59 if(aktFrage< ANZAHL_FRAGEN-1) {
60 fragen[++aktFrage].anzeigen (MainActivity);
61
62
63
64
65 }
66 }
67
68}
69
70}
die spiellogik

1package de.florian.spiel;
2
3import de.florian.spiel.R.id;
4import android.app.Activity;
5import android.widget.Button;
6import android.widget.TextView;
7
8
9class Frage {
10 private String frage;
11 private String option1;
12 private String option2;
13 private String option3;
14 private String option4;
15 private int loesung;
16
17 public Frage(String f, String o1, String o2, String o3, String o4, int l){
18 frage=f;
19 option1 = o1;
20 option2 = o2;
21 option3 = o3;
22 option4 = o4;
23 loesung = l;
24
25
26 }
27
28public void anzeigen(Activity MainActivity){
29((TextView) MainActivity.findViewById(id.frage)).setText(frage);
30((Button) MainActivity.findViewById(id.antwort1)).setText(option1);
31((Button) MainActivity.findViewById(id.antwort2)).setText(option2);
32((Button) MainActivity.findViewById(id.antwort3)).setText(option3);
33((Button) MainActivity.findViewById(id.antwort4)).setText(option4);
34
35}
36
37public boolean richtig(int ausgewaehlt) {
38 if(ausgewaehlt== this.loesung)
39 return true;
40 else
41 return false;
42}
43}
die fragen datei

Antworten
florian
  • Forum-Beiträge: 8

13.03.2014, 15:36:13 via Website

danke :)

Antworten
impjor
  • Forum-Beiträge: 1.793

13.03.2014, 15:50:45 via Website

Du kannst z.B. in deiner onClick-Methode einen Breakpoint setzen und dann die App im Debug-Modus starten. Dann kannst du genau sehen, ob der OnClickListener ausgeführt wird. Dann kannst du Schirtt für Schritt die Ausführung der Methode verfolgen und schauen, ob alles richtig ausgeführt wird oder wo was hängt.

Liebe Grüße impjor.

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

Antworten
florian
  • Forum-Beiträge: 8

13.03.2014, 15:52:13 via Website

impjor
Du kannst z.B. in deiner onClick-Methode einen Breakpoint setzen und dann die App im Debug-Modus starten. Dann kannst du genau sehen, ob der OnClickListener ausgeführt wird. Dann kannst du Schirtt für Schritt die Ausführung der Methode verfolgen und schauen, ob alles richtig ausgeführt wird oder wo was hängt.

werd ich jetzt mal testen

SvenDD

Antworten
florian
  • Forum-Beiträge: 8

13.03.2014, 16:10:46 via Website

wenn ich das mit einem breakpoint mache hab ich nen blackscreen ohne breakpoint kommt im logcat wenn ich was anklicke
03-13 11:09:20.600: W/AudioService(369): onLoadSoundEffects(), Error -1 while loading samples
03-13 11:09:22.350: E/SoundPool(369): error loading /system/media/audio/ui/Effect_Tick.ogg

Antworten
impjor
  • Forum-Beiträge: 1.793

13.03.2014, 16:15:37 via Website

Das LogCat hat erstmal nichts mit deiner App zu tun.
Wenn du die App im Debug-Modus startest kannst to mit "Step Over" (F6) bzw. "Step Into" (F5) dich im Code vorwärts bewegen.

Liebe Grüße impjor.

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

Antworten
florian
  • Forum-Beiträge: 8

13.03.2014, 16:24:27 via Website

also vor der klammer bei zeile 53 also über public void OnClick(View v) { springt derm immer zu einem class file editor und geht nicht weiter

— geändert am 13.03.2014, 16:33:30

Antworten
impjor
  • Forum-Beiträge: 1.793

13.03.2014, 16:36:41 via App

Ja, weil dann die onCreate-Methode zu Ende ist und Code ausgeführt wird, den du nicht geschrieben hast, deshalb sollst du ja den Breakpoint in der onClick-Methode setzen. Dann wirst du nämlich feststellen, dass diese nie aufgerufen wird und deshalb auch keine neuen Fragen kommen. Stattdessen wird deine onClick-Methode ausgeführt, die leer ist, da sie korrent geschrieben ist. (Java beachtet Groß- und Kleinschreibung)

— geändert am 13.03.2014, 16:37:35

Liebe Grüße impjor.

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

Antworten
florian
  • Forum-Beiträge: 8

13.03.2014, 16:42:27 via Website

impjor
Ja, weil dann die onCreate-Methode zu Ende ist und Code ausgeführt wird, den du nicht geschrieben hast, deshalb sollst du ja den Breakpoint in der onClick-Methode setzen. Dann wirst du nämlich feststellen, dass diese nie aufgerufen wird und deshalb auch keine neuen Fragen kommen.
achso danke ich habe das alles nach dem buch jetzt lern ich android gehmacht und ich habe da keine codes gefunden die ich vergessen habe kannst du mir vllt sagen wie ich die onclick methode ausgeführt bekomme

— geändert am 13.03.2014, 16:45:49

Antworten
impjor
  • Forum-Beiträge: 1.793

13.03.2014, 16:58:43 via App

Du hast zwei Methoden: onClick und OnClick. Java beachtet Groß-/Kleinschreibung. Im OnClickListener-Interface heißt die Methode onClick, daher wird immer diese aufgerufen werden.

Ich würde dir empfehlen alle Methoden- und Variabelnnamen erst klein dann groß zu schreiben: onClick, mainActivity etc. Klassennamen werden dagegen immer Großgeschrieben: SpielLogik, MainActivity, Frage, etc.

Statt deinem switch-Konstrukt kannst du auch etwas einfacheres nutzen:
Nimm ein Array mit allen Buttons:
int[] buttons = new int[] {R.id.button1, R.id.button2, ...};
In der Schleife kannst du dann folgendes nutzen:
Button b = (Button) findViewById(buttons[n]);
...

Liebe Grüße impjor.

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

Antworten
Andy N.
  • Forum-Beiträge: 3.112

13.03.2014, 21:20:46 via App

Du soltest auch deinen Code besser trennen. Logik und Datenelemente haben keine GUI Elemente.

Und die hardgecodeten Fragen sind nur zum testen?

— geändert am 13.03.2014, 21:21:12

Antworten
florian
  • Forum-Beiträge: 8

14.03.2014, 14:56:58 via Website

also ich hab das jetzt hingerkiregt und ja das waren erstmal testfragen aber jetzt hab ich das problem das nach der letzten frage die app abstürtzt

Antworten