Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error : android.app.SuperNotCalledException

Tags:

android

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);
    }
 } 
like image 613
Rahul Mandaliya Avatar asked Jul 15 '11 11:07

Rahul Mandaliya


3 Answers

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.

like image 102
Gaurav Roy Avatar answered Nov 15 '22 21:11

Gaurav Roy


I added this line and everything worked fine:

super.onCreate(savedInstanceState);

Added it to the first line in OnCreate() method.

like image 14
David Zaki Avatar answered Nov 15 '22 21:11

David Zaki


 @Override     
   public void onDestroy() {   
  super.onDestroy()
     eventsData.close();     
   }   
like image 2
ngesh Avatar answered Nov 15 '22 21:11

ngesh