Android Studio mit SQL Abfrage Problem Null Pointer

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Android Studio mit SQL Abfrage Problem Null Pointer

    Hallo ihr lieben ich versuche mich gerade mit Android Studio und bekomm immer wieder einen fehler bei meinem Code:

    Das ist mein Code:

    Java-Quellcode

    1. public class Connect {
    2. // Diese Eintraege werden zum
    3. // Verbindungsaufbau benoetigt.
    4. private String hostname = "localhost";
    5. private String port = "3306";
    6. private String dbname = "dbname";
    7. private String user = "user";
    8. private String password = "passwort";
    9. //Antworten Array erzeugen mit Größe 4 aufgrundlage des Objektes aus der
    10. //Klasse Antworten
    11. private Connection conn = null;
    12. private Antwort[] antworten = null;
    13. int Runde = 1;
    14. public Connect(){
    15. this.antworten = new Antwort[4];
    16. this.conn = this.verbinden();
    17. //this.verbindenFrage(this.conn);
    18. //this.getAntworten();
    19. }
    20. private Connection verbinden(){
    21. Connection con1 = null;
    22. //VERSUCH I
    23. try {
    24. Log.d("Tr-Laden", "* Treiber laden");
    25. //System.out.println("* Treiber laden");
    26. //Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    27. Class.forName("com.mysql.jdbc.Driver");
    28. }
    29. catch (Exception e) {
    30. System.err.println("Unable to load driver.");
    31. e.printStackTrace();
    32. }
    33. try {
    34. System.out.println("* Verbindung aufbauen");
    35. String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
    36. con1 = DriverManager.getConnection(url, user, password);
    37. }catch(SQLException sqle){
    38. System.out.println("SQLException: " + sqle.getMessage());
    39. System.out.println("SQLState: " + sqle.getSQLState());
    40. System.out.println("VendorError: " + sqle.getErrorCode());
    41. sqle.printStackTrace();
    42. }
    43. System.out.println("This Conn = " + con1);
    44. return con1;
    45. }
    46. //VERSUCH II
    47. /*
    48. try {
    49. Class.forName("com.mysql.jdbc.Driver");
    50. // connect way #1
    51. String url1 = "jdbc:mysql://localhost:3306/dbname";
    52. String user = "user";
    53. String password = "passwort";
    54. conn1 = DriverManager.getConnection(url1, user, password);
    55. if (conn1 != null) {
    56. System.out.println("Connected to the database test1");
    57. }
    58. // connect way #2
    59. String url2 = "jdbc:mysql://localhost:3306/dbname?user=user&password=passwort";
    60. conn2 = DriverManager.getConnection(url2);
    61. if (conn2 != null) {
    62. System.out.println("Connected to the database test2");
    63. }
    64. // connect way #3
    65. String url3 = "jdbc:mysql://localhost:3306/dbname";
    66. Properties info = new Properties();
    67. info.put("user", "user");
    68. info.put("password", "passwort");
    69. conn3 = DriverManager.getConnection(url3, info);
    70. if (conn3 != null) {
    71. System.out.println("Connected to the database test3");
    72. }
    73. } catch (SQLException ex) {
    74. System.out.println("An error occurred. Maybe user/password is invalid");
    75. ex.printStackTrace();
    76. } catch (ClassNotFoundException e) {
    77. // TODO Auto-generated catch block
    78. e.printStackTrace();
    79. }
    80. return con;
    81. }
    82. */
    83. public void verbindenFrage(Connection conn) {
    84. try {
    85. System.out.println("* Statement beginnen");
    86. Statement stmt = conn.createStatement();
    87. System.out.println("* Abfrage beginnen");
    88. //Auslesen der Frage aus der Tabelen Fragen , da es nur eine Frage geben kann wird
    89. //diese per RAND ausgesucht !!
    90. String sqlCommand =
    91. "SELECT F_ID, F_TEXT FROM Fragen where S_ID ="+ Runde + " ORDER BY RAND()"+" LIMIT 1";
    92. // "SELECT ID, Frage FROM Fragen ";
    93. ResultSet rs = stmt.executeQuery(sqlCommand);
    94. System.out.println("* Ergebnisse anzeigen");
    95. int F_ID = 0;
    96. while (rs.next()) {
    97. F_ID = rs.getInt(1);
    98. String F_TEXT = rs.getString("F_TEXT");
    99. System.out.println( "ID: "+F_ID +" Frage: "+F_TEXT );
    100. }
    101. //Start der Abfragen bezüglich der Antworten zur oben ausgewählten Frage
    102. Statement stmt2 = conn.createStatement();
    103. String antwortQuery = "SELECT A_ID, A_TEXT, istRichtig FROM Antworten WHERE F_ID = " + F_ID;
    104. rs.close();
    105. rs = stmt2.executeQuery(antwortQuery);
    106. int counter = 0;
    107. while (rs.next()) {
    108. int A_ID = rs.getInt("A_ID");
    109. String A_TEXT = rs.getString("A_TEXT");
    110. int istRichtig = rs.getInt("istRichtig");
    111. System.out.println( "ID: "+A_ID +" Antwort: "+A_TEXT +" istRichtig:" +istRichtig);
    112. //Prüfen auf true oder false
    113. boolean istRichtig2 = false;
    114. if(istRichtig != 0){
    115. istRichtig2 = true;
    116. }
    117. //Antworten ins Array geben !!
    118. Antwort ant = new Antwort(A_TEXT, istRichtig2);
    119. this.antworten[counter] = ant;
    120. counter++;
    121. }
    122. rs.close();
    123. System.out.println("* Statement beenden");
    124. stmt.close();
    125. stmt2.close();;
    126. System.out.println("* Datenbank-Verbindung beenden");
    127. conn.close();
    128. this.zeigenAntworten();
    129. }
    130. catch (SQLException sqle) {
    131. System.out.println("SQLException: " + sqle.getMessage());
    132. System.out.println("SQLState: " + sqle.getSQLState());
    133. System.out.println("VendorError: " + sqle.getErrorCode());
    134. sqle.printStackTrace();
    135. }
    136. }
    137. private void zeigenAntworten(){
    138. //Array abfragen und Inhalte ausgeben
    139. System.out.println("Array Abfragen");
    140. System.out.println(this.antworten.length);
    141. System.out.println(this.antworten[0].getAText() + " -> " + this.antworten[0].isIstRichtig());
    142. System.out.println(this.antworten[1]);
    143. }
    144. public Antwort[] getAntworten(){
    145. return this.antworten;
    146. }
    147. }
    Alles anzeigen

    Jedoch erhalte ich immer wieder folgenden fehler Code:

    Quellcode

    1. 07-31 10:53:38.031 24783-24783/? E/AndroidRuntime: FATAL EXCEPTION: main
    2. Process: de.blog18.quizmasterv10, PID: 24783
    3. 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
    4. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)

    Sprich ein NullPointer Exception, nun weiss ich langsam nicht mehr weiter.

    Hat eventuell jemand eine Idee? ;(
  • Hier mal der komplette Fehler Code da die Nachricht oben sonst zu lang wurde!

    Quellcode

    1. 07-31 10:53:38.031 24783-24783/? E/AndroidRuntime: FATAL EXCEPTION: main
    2. Process: de.blog18.quizmasterv10, PID: 24783
    3. 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
    4. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
    5. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
    6. at android.app.ActivityThread.access$800(ActivityThread.java:151)
    7. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
    8. at android.os.Handler.dispatchMessage(Handler.java:102)
    9. at android.os.Looper.loop(Looper.java:135)
    10. at android.app.ActivityThread.main(ActivityThread.java:5254)
    11. at java.lang.reflect.Method.invoke(Native Method)
    12. at java.lang.reflect.Method.invoke(Method.java:372)
    13. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    14. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    15. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String de.blog18.quizmasterv10.Antwort.getAText()' on a null object reference
    16. at de.blog18.quizmasterv10.MainActivity.setupButtons(MainActivity.java:46)
    17. at de.blog18.quizmasterv10.MainActivity.onCreate(MainActivity.java:31)
    18. at android.app.Activity.performCreate(Activity.java:5990)
    19. at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
    20. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
    21. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
    22. at android.app.ActivityThread.access$800(ActivityThread.java:151)
    23. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
    24. at android.os.Handler.dispatchMessage(Handler.java:102)
    25. at android.os.Looper.loop(Looper.java:135)
    26. at android.app.ActivityThread.main(ActivityThread.java:5254)
    27. at java.lang.reflect.Method.invoke(Native Method)
    28. at java.lang.reflect.Method.invoke(Method.java:372)
    29. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    30. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    Alles anzeigen
  • Java-Quellcode

    1. public void setupButtons(){
    2. for(int a = 0 ; a < c1.getAntworten().length ; a++){
    3. c1.getAntworten()[a].getAText();
    4. }
    5. Button b1 = (Button) findViewById(R.id.button);
    6. b1.setText(c1.getAntworten()[0].getAText());
    7. Button b2 =(Button) findViewById(R.id.button2);
    8. b2.setText(c1.getAntworten()[1].getAText());
    9. Button b3 =(Button) findViewById(R.id.button3);
    10. b3.setText(c1.getAntworten()[2].getAText());
    11. Button b4 =(Button) findViewById(R.id.button4);
    12. b4.setText(c1.getAntworten()[3].getAText());
    13. }
    Alles anzeigen
    Das passiert im passenden bereich !
  • hi ja wo den nun in der for schleife oder bei den Buttons?
    Sind die gesuchten id s auch in dem geladenen layout auch vorhanden?
    Prüfe ob die id gefunden wird ,wenn nicht und du willst einen Text setzen kommt ein nullpointer.

    Ist dein c1.getAntworten()[0].getAText() auch ein String ?
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Offensichtlich ist "c1.getAntworten()[a]" für irgendein Wert von a noch nicht initialisiert (bzw. null). D.H. Du hast ein Problem beim initialisieren des Arrays. Da es 4 Antworten gibt (this.antworten = new Antwort[4];) würde ich mal in der Schleife prüfen, ob dr Counter auch bis 3 geht. Z.B. in der Zeile:

    System.out.println( "ID: "+A_ID +" Antwort: "+A_TEXT +" istRichtig:" +istRichtig);