Java
package com.example.integrationsquiz;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Random;
import java.util.stream.IntStream;
public class Geschichte extends AppCompatActivity implements View.OnClickListener {
ImageView gBild;
TextView frage, auswertung;
Button antwortA, antwortB, antwortC, antwortD;
Button [] knoepp = {antwortA, antwortB, antwortC, antwortD};
int laenge = 3;
ArrayList<Integer> schongefragt = new ArrayList<Integer>();
Button rButton;
// Erste SQLite-Datenbank-Namen, hier läuft alles einwandfrei
final String gdbName = "histoerche.db";
final String gdbTabelle = "geschichtsfragen";
// Zweite SQLite-Datenbank-Namen, hier treten Probleme auf.
final String wndNAME = "wnd.db";
final String wndTabelle = "wnd";
int aw;
String imageName;
Button weiter;
boolean gedruckt;
int korrekt;
int color;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_geschichte);
gBild = findViewById(R.id.gBild);
frage = findViewById(R.id.frage);
antwortA = findViewById(R.id.antwortA);
antwortB = findViewById(R.id.antwortB);
antwortC = findViewById(R.id.antwortC);
antwortD = findViewById(R.id.antwortD);
auswertung = findViewById(R.id.auswertung);
weiter = findViewById(R.id.wigger);
holeGeschichtsDatenbank();
fragestellen();
antwortA.setOnClickListener(this);
antwortB.setOnClickListener(this);
antwortC.setOnClickListener(this);
antwortD.setOnClickListener(this);
weiter.setOnClickListener(this);
}
public void holeGeschichtsDatenbank(){
//Datenbanken werden nur erstellt, wenn die App gerade installiert wurde.
if (MainActivity.installation==true){
//Deklaration und Initialisierung der ersten Datenbank.
SQLiteDatabase gdb = openOrCreateDatabase(gdbName, MODE_PRIVATE, null);
gdb.execSQL("CREATE TABLE " + gdbTabelle + "(id INTEGER, fragentext TEXT, bild String, rAntwort TEXT, kat Text)");
gdb.execSQL("INSERT INTO " + gdbTabelle + " VALUES(1, 'Wann fand die Wiedervereinigung statt?', 'wvg', '03.10.1990', 'WND')");
gdb.execSQL("INSERT INTO " + gdbTabelle + " VALUES(2, 'Wann fand die Reichsgründung statt?', 'reichsg', '18.01.1871', '187080')");
gdb.execSQL("INSERT INTO " + gdbTabelle + " VALUES(3, 'Wann trat das Grundgesetz inkraft?', 'gg', '23.05.1949', '4050')");
//Deklaration und Initialisierung der zweiten Datenbank.
SQLiteDatabase wnd = openOrCreateDatabase(wndNAME, MODE_PRIVATE, null);
wnd.execSQL("CREATE TABLE " + wndTabelle + "(id INTEGER, antwort TEXT)");
wnd.execSQL("INSERT INTO "+ wndTabelle + " VALUES(1,'09.11.1989')");
wnd.execSQL("INSERT INTO "+ wndTabelle+ " VALUES(2,'17.06.1990')");
wnd.execSQL("INSERT INTO "+ wndTabelle + " VALUES(3,'01.01.1990')");
wnd.execSQL("INSERT INTO "+ wndTabelle + " VALUES(4,'02.03.1990')");
gdb.close();
wnd.close();
}
}
protected void fragestellen(){
//Diese Methode ist für das Problem nicht relevant, sie funktioniert einwandfrei
auswertung.setText("Fabelhaft");
auswertung.setTextColor(Color.WHITE);
gedruckt = false;
weiter.setVisibility(View.VISIBLE);
int ind = (int)(Math.random() * laenge)+1;
if (schongefragt.size()!=laenge){
antwortA.setBackgroundColor(Color.MAGENTA);
antwortB.setBackgroundColor(Color.MAGENTA);
antwortC.setBackgroundColor(Color.MAGENTA);
antwortD.setBackgroundColor(Color.MAGENTA);
antwortA.setText("Antwort A");
antwortB.setText("Antwort B");
antwortC.setText("Antwort C");
antwortD.setText("Antwort D");
//Now choosing random question
while (schongefragt.contains(ind)){
ind = (int)(Math.random() * laenge)+1;
}
schongefragt.add(ind);
setzefrage(ind);
}
}
@SuppressLint("ResourceType")
protected void setzefrage(int j){
if (j <=laenge){
//Aufruf der ersten Datenbank und Auswahl der Werte funktionieren einwandfrei
SQLiteDatabase db = openOrCreateDatabase(gdbName, MODE_PRIVATE, null );
Cursor cursor = db.rawQuery("SELECT * FROM " + gdbTabelle+ " WHERE id = ' " + j + " ' " , null);
cursor.moveToFirst();
frage.setText(cursor.getString(1));
imageName = cursor.getString(2);
int imageID = getResources().getIdentifier(imageName, "drawable", getPackageName());
gBild.setImageResource(imageID);
aw = (int) (Math.random()*4) +1;
/* Die erste Datenbank enthält alle Fragen und die richtige Antwortmöglichkeit, die auf einen zufälligen Knopf platziert wird
*/
switch (aw){
case 1:
antwortA.setText(cursor.getString(3));
rButton = antwortA;
break;
case 2:
antwortB.setText(cursor.getString(3));
rButton = antwortB;
break;
case 3:
antwortC.setText(cursor.getString(3));
rButton = antwortC;
break;
case 4:
antwortD.setText(cursor.getString(3));
rButton = antwortD;
break;
}
if(j==1){
/*Wenn die Frage mit dem Index 1 ausgwählt wird, werden zusätzlich noch Antwortmöglichkeiten auf den Knöpfen platziert, die in der
zweiten Datenbank erhalten sind. Die gleiche Prozedur wie oben, nur funktioniert es nicht.
*/
try{
//Kategorie k = new Kategorie();
for (int i = 0; i < 4; i++) {
if (knoepp[i] != rButton) {
SQLiteDatabase db2 = openOrCreateDatabase(wndNAME, MODE_PRIVATE, null);
Cursor cursor2 = db2.rawQuery("SELECT * FROM " + wndTabelle + " WHERE id = ' " + (i+1) + " ' ", null);
cursor2.moveToFirst();
knoepp[i].setText(cursor2.getString(1));
cursor2.close();
db2.close();
}
}
}catch(Exception e){
frage.setTextSize(15);
frage.setText(e.getMessage());
System.out.println(e.getMessage());
}
}
cursor.close();
db.close();
}
}
@Override
public void onClick(View view) {
// Diese Methode schaut, ob die Antwort stimmt und die funktioniert einwandfrei.
}
}
Alles anzeigen
Hallo zusammen,
ich bin dabei eine Quiz-App zu programmieren, diese enthält unter anderem die Klasse „Geschichte“. Alle anderen Klassen funktionieren einwandfrei und sind für unsere Betrachtung nicht von Bedeutung.
Wenn ich dieses Programm ausführe, erhalte ich eine Fehlermeldung, die ihr im Anhang euch anschauen könnt.
Es erschließt sich mir nicht, weshalb die App anscheinend die zweite Datenbank nicht finden kann, das dies bei der ersten reibungslos geklappt hat.