i am new user of android and i had make one android database connection and create table application but at run time it will generate an error.
an error is hear :
07-15 16:25:55.404: ERROR/AndroidRuntime(3308): Uncaught handler: thread main exiting due to uncaught exception
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): android.app.SuperNotCalledException: Activity {org.example.sqldemo/org.example.sqldemo.SQLDemo} did not call through to super.onDestroy()
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3134)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): enter code here at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3159)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at android.app.ActivityThread.access$2400(ActivityThread.java:112)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at android.os.Handler.dispatchMessage(Handler.java:99)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at android.os.Looper.loop(Looper.java:123)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at android.app.ActivityThread.main(ActivityThread.java:3948)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at java.lang.reflect.Method.invoke(Method.java:521)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
07-15 16:25:55.454: ERROR/AndroidRuntime(3308): at dalvik.system.NativeStart.main(NativeMethod)
SQLDemo.java my code is hear :
package com.dailynote;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.TextView;
public class SQLDemo extends Activity {
EventDataSQLHelper eventsData;
TextView output;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.output);
output = (TextView) findViewById(R.id.textView1);
eventsData = new EventDataSQLHelper(this);
addEvent("Hello Android Event");
Cursor cursor = getEvents();
showEvents(cursor);
}
@Override
public void onDestroy() {
eventsData.close();
}
private void addEvent(String title) {
SQLiteDatabase db = eventsData.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(EventDataSQLHelper.TIME, System.currentTimeMillis());
values.put(EventDataSQLHelper.TITLE, title);
db.insert(EventDataSQLHelper.TABLE, null, values);
}
private Cursor getEvents() {
SQLiteDatabase db = eventsData.getReadableDatabase();
Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null, null, null,
null, null);
startManagingCursor(cursor);
return cursor;
}
private void showEvents(Cursor cursor) {
StringBuilder ret = new StringBuilder("Saved Events:\n\n");
while (cursor.moveToNext()) {
long id = cursor.getLong(0);
long time = cursor.getLong(1);
String title = cursor.getString(2);
ret.append(id + ": " + time + ": " + title + "\n");
}
output.setText(ret);
}
}
EventDataSQLHelper.java
package com.dailynote;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;
/** Helper to the database, manages versions and creation */
public class EventDataSQLHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "events.db";
private static final int DATABASE_VERSION = 1;
// Table name
public static final String TABLE = "events";
// Columns
public static final String TIME = "time";
public static final String TITLE = "title";
public EventDataSQLHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table " + TABLE + "( " + BaseColumns._ID
+ " integer primary key autoincrement, " + TIME + " integer, "
+ TITLE + " text not null);";
Log.d("EventsData", "onCreate: " + sql);
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion >= newVersion)
return;
String sql = null;
if (oldVersion == 1)
sql = "alter table " + TABLE + " add note text;";
if (oldVersion == 2)
sql = "";
Log.d("EventsData", "onUpgrade : " + sql);
if (sql != null)
db.execSQL(sql);
}
}
public void onDestroy() {
super.onDestroy();
eventsData.close();
}
This is to be called because, Activity class in android does some cleanup by itself. When base class functions are overridden by the derived class that is the activity as done in case of onDestroy(), the base class function needs to be called explicitly to perform the expected operation.
I added this line and everything worked fine:
super.onCreate(savedInstanceState);
Added it to the first line in OnCreate()
method.
@Override
public void onDestroy() {
super.onDestroy()
eventsData.close();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With