Releasing statement in a finalizer. Please ensure that you explicitly call close()

  • Antworten:4
vali k
  • Forum-Beiträge: 10

06.12.2012, 16:01:24 via Website

Ich bin im Moment wie ich diesen Fehler aus dem Log beheben Kann kann mir evtl jemand sagen wie das gehen könnte.

1public void onClick(View v) {
2 String nachname = editTextNachname.getText().toString();
3 Log.e("NAME", nachname);
4 String vorname = editTextVorname.getText().toString();
5 Log.e("VORNAME", vorname);
6 String password = editTextPasswort.getText().toString();
7
8 // startMain();
9 UserFunctions userFunction = new UserFunctions();
10 Log.d("Button", "Login");
11 JSONObject json = userFunction.loginUser(nachname, vorname,
12 password);
13 Log.d("JSON-Class-Login-Login", json.toString());
14
15 try {
16 if (json.getString(KEY_SUCCESS) != null) {
17 textViewLoginErrorMsg.setText("success"); // Änderrung
18 String res = json.getString(KEY_SUCCESS);
19 if (Integer.parseInt(res) == 1) {
20 // user successfully logged in
21 // Store user details in SQLite Database
22 DatabaseHandler db = new DatabaseHandler(
23 getApplicationContext());
24 Log.d("db", "erstellt_DBLOGIN");
25 JSONObject json_user = json
26 .getJSONObject("userdaten");
27
28 // Clear all previous data in database
29 userFunction.logoutUser(getApplicationContext());
30 Log.e("ID2", json_user.getString(KEY_ID));
31 Log.e("LASTTIME2", json_user.getString(KEY_LASTTTIME));
32 Log.e("LASTDATE2", json_user.getString(KEY_LASTDATE));
33 Log.e("MAILADRESSE2", json_user.getString(KEY_MAILADRESSE));
34 Log.e("STRASSE2", json_user.getString(KEY_STRASSE));
35 Log.e("VORNAME2", json_user.getString(KEY_VORNAME));
36 Log.e("NAME2", json_user.getString(KEY_NAME));
37 Log.e("ORT2", json_user.getString(KEY_ORT));
38 Log.e("PLZ2", json_user.getString(KEY_PLZ));
39 Log.e("GESCHLECHT2", json_user.getString(KEY_GESCHLECHT));
40 Log.e("GEBDAT2", json_user.getString(KEY_GEBDAT));
41 Log.e("KLASSE2", json_user.getString(KEY_KLASSE));
42 Log.e("PW2", json_user.getString("pw"));
43 Log.e("NAME_ERZ2", json_user.getString(KEY_NAME_ERZ));
44 Log.e("ANREDE_ERZ2", json_user.getString(KEY_ANREDE_ERZ));
45 Log.e("MAILADRESSE_ELTERN2", json_user.getString(KEY_MAILADRESSE_ELTERN));
46
47
48 db.addUser(
49 json_user.getString (KEY_ID),
50 json_user.getString (KEY_LASTTTIME),
51 json_user.getString (KEY_LASTDATE),
52 json_user.getString (KEY_MAILADRESSE),
53 json_user.getString (KEY_STRASSE),
54 json_user.getString (KEY_VORNAME),
55 json_user.getString (KEY_NAME),
56 json_user.getString (KEY_ORT),
57 json_user.getString (KEY_PLZ),
58 json_user.getString (KEY_GESCHLECHT),
59 json_user.getString (KEY_GEBDAT),
60 json_user.getString (KEY_KLASSE),
61 json_user.getString (KEY_PW),
62 json_user.getString (KEY_NAME_ERZ),
63 json_user.getString (KEY_ANREDE_ERZ),
64 json_user.getString (KEY_MAILADRESSE_ELTERN));
65
66 //db.addUser(json_user.getString (KEY_ID), json_user.getString (KEY_VORNAME), json_user.getString (KEY_NAME),json_user.getString(KEY_KLASSE), json_user.getString (KEY_MAILADRESSE_ELTERN));
67
68 // Launch Dashboard Screen
69 id = json_user.getString(KEY_ID);
70 int schid = Integer.parseInt(id);
71 Stammdaten.schid = schid;
72
73 Log.d("LOGIN_ABFRGANE_DB",db.getStammdaten(schid).get_nameErz() );
74 Intent main = new Intent(getApplicationContext(),
75 Main.class);
76
77 // Close all views before launching Dashboard
78 main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
79 startActivity(main);
80
81 // Close Login Screen
82 finish();
83 } else {
84 // Error in login
85 textViewLoginErrorMsg
86 .setText("Incorrect username/password");
87 }
88 }
89 } catch (JSONException e) {
90 e.printStackTrace();
91 }
92 }
93
94
95 });

1public void addUser(String id, String lasttime, String lastdate,
2 String mailadresse, String strasse, String vorname, String name,
3 String ort, String plz, String geschlecht, String gebdat,
4 String klasse, String pw, String nameErz, String anredeErz,
5 String mailadresse_eltern) {
6 SQLiteDatabase db = this.getWritableDatabase();
7 ContentValues values = new ContentValues();
8
9 values.put(KEY_ID, id);
10 values.put(KEY_LASTTIME, lasttime);
11 values.put(KEY_LASTDATE, lastdate);
12 values.put(KEY_MAILADRESSE, mailadresse);
13 values.put(KEY_STRASSE, strasse);
14 values.put(KEY_VORNAME, vorname);
15 values.put(KEY_NAME, name);
16 values.put(KEY_ORT, ort);
17 values.put(KEY_PLZ, plz);
18 values.put(KEY_GESCHLECHT, geschlecht);
19 values.put(KEY_GEBDAT, gebdat);
20 values.put(KEY_KLASSE, klasse);
21 values.put(KEY_PW, pw);
22 values.put(KEY_ANREDE_ERZ, anredeErz);
23 values.put(KEY_NAME_ERZ, nameErz);
24 values.put(KEY_MAILADRESSE_ELTERN, mailadresse_eltern);
25 // Inserting Row
26 db.insert(TABLE_LOGIN, null, values);
27 db.close(); // Closing database connection
28 }

Fehlermeldung im Log:

12-06 14:50:24.337: W/SQLiteCompiledSql(413): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT id, lasttime, lastdate, mailadresse, strasse, vorname, name, ort, plz, geschlecht, gebdat, kl
12-06 14:50:24.337: W/SQLiteCompiledSql(413): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:62)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1301)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at datenbanktest.DatabaseHandler.getStammdaten(DatabaseHandler.java:122)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at hogau.absenzen.Login$1.onClick(Login.java:141)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.view.View.performClick(View.java:2408)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.view.View$PerformClick.run(View.java:8816)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.os.Handler.handleCallback(Handler.java:587)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.os.Handler.dispatchMessage(Handler.java:92)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.os.Looper.loop(Looper.java:123)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at java.lang.reflect.Method.invokeNative(Native Method)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at java.lang.reflect.Method.invoke(Method.java:521)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-06 14:50:24.337: W/SQLiteCompiledSql(413): at dalvik.system.NativeStart.main(Native Method)

Antworten
Manuel
  • Forum-Beiträge: 12

06.12.2012, 16:12:27 via Website

Hi,


hier scheint das Problem zu sein:
1Log.d("LOGIN_ABFRGANE_DB",db.getStammdaten(schid).get_nameErz() );
schau mal nach ob die Funktion getStammdaten den Cursor den sie benutzt auch zu macht,
also: cursor.close();

Antworten
vali k
  • Forum-Beiträge: 10

06.12.2012, 16:16:15 via Website

1public Stammdaten getStammdaten(int id) {
2 SQLiteDatabase db = this.getReadableDatabase();
3
4 Cursor cursor = db.query(TABLE_LOGIN, new String[] { KEY_ID,
5 KEY_LASTTIME, KEY_LASTDATE, KEY_MAILADRESSE, KEY_STRASSE,
6 KEY_VORNAME, KEY_NAME, KEY_ORT, KEY_PLZ, KEY_GESCHLECHT,
7 KEY_GEBDAT, KEY_KLASSE, KEY_PW, KEY_NAME_ERZ, KEY_ANREDE_ERZ,
8 KEY_MAILADRESSE_ELTERN }, KEY_ID + "=?",
9 new String[] { String.valueOf(id) }, null, null, null, null);
10 if (cursor != null)
11 cursor.moveToFirst();
12
13 Stammdaten stammdaten = new Stammdaten(Integer.parseInt(cursor
14 .getString(0)), cursor.getString(1), cursor.getString(2),
15 cursor.getString(3), cursor.getString(4), cursor.getString(5),
16 cursor.getString(6), cursor.getString(7), cursor.getString(8),
17 cursor.getString(9), cursor.getString(10),
18 cursor.getString(11), cursor.getString(12),
19 cursor.getString(13), cursor.getString(14),
20 cursor.getString(15));
21 // return contact
22 cursor.close();
23 return stammdaten;
24 }
Ja wird wieder zugemacht

Antworten
Manuel
  • Forum-Beiträge: 12

06.12.2012, 16:32:38 via Website

Wenn ich das richtig sehe fehlt aber das db.close() in der methode.

vali k

Antworten
vali k
  • Forum-Beiträge: 10

06.12.2012, 16:35:23 via Website

Danke das wahr der Fehler jetzt geht es :-)

Antworten