Hallo ihr lieben ich versuche mich gerade mit Android Studio und bekomm immer wieder einen fehler bei meinem Code:
Das ist mein Code:
public class Connect {
// Diese Eintraege werden zum
// Verbindungsaufbau benoetigt.
private String hostname = "localhost";
private String port = "3306";
private String dbname = "dbname";
private String user = "user";
private String password = "passwort";
//Antworten Array erzeugen mit Größe 4 aufgrundlage des Objektes aus der
//Klasse Antworten
private Connection conn = null;
private Antwort[] antworten = null;
int Runde = 1;
public Connect(){
this.antworten = new Antwort[4];
this.conn = this.verbinden();
//this.verbindenFrage(this.conn);
//this.getAntworten();
}
private Connection verbinden(){
Connection con1 = null;
//VERSUCH I
try {
Log.d("Tr-Laden", "* Treiber laden");
//System.out.println("* Treiber laden");
//Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Class.forName("com.mysql.jdbc.Driver");
}
catch (Exception e) {
System.err.println("Unable to load driver.");
e.printStackTrace();
}
try {
System.out.println("* Verbindung aufbauen");
String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
con1 = DriverManager.getConnection(url, user, password);
}catch(SQLException sqle){
System.out.println("SQLException: " + sqle.getMessage());
System.out.println("SQLState: " + sqle.getSQLState());
System.out.println("VendorError: " + sqle.getErrorCode());
sqle.printStackTrace();
}
System.out.println("This Conn = " + con1);
return con1;
}
//VERSUCH II
/*
try {
Class.forName("com.mysql.jdbc.Driver");
// connect way #1
String url1 = "jdbc:mysql://localhost:3306/dbname";
String user = "user";
String password = "passwort";
conn1 = DriverManager.getConnection(url1, user, password);
if (conn1 != null) {
System.out.println("Connected to the database test1");
}
// connect way #2
String url2 = "jdbc:mysql://localhost:3306/dbname?user=user&password=passwort";
conn2 = DriverManager.getConnection(url2);
if (conn2 != null) {
System.out.println("Connected to the database test2");
}
// connect way #3
String url3 = "jdbc:mysql://localhost:3306/dbname";
Properties info = new Properties();
info.put("user", "user");
info.put("password", "passwort");
conn3 = DriverManager.getConnection(url3, info);
if (conn3 != null) {
System.out.println("Connected to the database test3");
}
} catch (SQLException ex) {
System.out.println("An error occurred. Maybe user/password is invalid");
ex.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
*/
public void verbindenFrage(Connection conn) {
try {
System.out.println("* Statement beginnen");
Statement stmt = conn.createStatement();
System.out.println("* Abfrage beginnen");
//Auslesen der Frage aus der Tabelen Fragen , da es nur eine Frage geben kann wird
//diese per RAND ausgesucht !!
String sqlCommand =
"SELECT F_ID, F_TEXT FROM Fragen where S_ID ="+ Runde + " ORDER BY RAND()"+" LIMIT 1";
// "SELECT ID, Frage FROM Fragen ";
ResultSet rs = stmt.executeQuery(sqlCommand);
System.out.println("* Ergebnisse anzeigen");
int F_ID = 0;
while (rs.next()) {
F_ID = rs.getInt(1);
String F_TEXT = rs.getString("F_TEXT");
System.out.println( "ID: "+F_ID +" Frage: "+F_TEXT );
}
//Start der Abfragen bezüglich der Antworten zur oben ausgewählten Frage
Statement stmt2 = conn.createStatement();
String antwortQuery = "SELECT A_ID, A_TEXT, istRichtig FROM Antworten WHERE F_ID = " + F_ID;
rs.close();
rs = stmt2.executeQuery(antwortQuery);
int counter = 0;
while (rs.next()) {
int A_ID = rs.getInt("A_ID");
String A_TEXT = rs.getString("A_TEXT");
int istRichtig = rs.getInt("istRichtig");
System.out.println( "ID: "+A_ID +" Antwort: "+A_TEXT +" istRichtig:" +istRichtig);
//Prüfen auf true oder false
boolean istRichtig2 = false;
if(istRichtig != 0){
istRichtig2 = true;
}
//Antworten ins Array geben !!
Antwort ant = new Antwort(A_TEXT, istRichtig2);
this.antworten[counter] = ant;
counter++;
}
rs.close();
System.out.println("* Statement beenden");
stmt.close();
stmt2.close();;
System.out.println("* Datenbank-Verbindung beenden");
conn.close();
this.zeigenAntworten();
}
catch (SQLException sqle) {
System.out.println("SQLException: " + sqle.getMessage());
System.out.println("SQLState: " + sqle.getSQLState());
System.out.println("VendorError: " + sqle.getErrorCode());
sqle.printStackTrace();
}
}
private void zeigenAntworten(){
//Array abfragen und Inhalte ausgeben
System.out.println("Array Abfragen");
System.out.println(this.antworten.length);
System.out.println(this.antworten[0].getAText() + " -> " + this.antworten[0].isIstRichtig());
System.out.println(this.antworten[1]);
}
public Antwort[] getAntworten(){
return this.antworten;
}
}
Alles anzeigen
Jedoch erhalte ich immer wieder folgenden fehler Code:
07-31 10:53:38.031 24783-24783/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.blog18.quizmasterv10, PID: 24783
java.lang.RuntimeException: Unable to start activity ComponentInfo{de.blog18.quizmasterv10/de.blog18.quizmasterv10.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String de.blog18.quizmasterv10.Antwort.getAText()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
Sprich ein NullPointer Exception, nun weiss ich langsam nicht mehr weiter.
Hat eventuell jemand eine Idee?