Ошибка: android.app.SuperNotCalledException

Я новый пользователь android, и я сделал одно соединение с базой данных Android и создаю приложение таблицы, но во время выполнения он будет генерировать ошибку.
Слышится ошибка:

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 мой код слышит:

  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); } } 

Solutions Collecting From Web of "Ошибка: android.app.SuperNotCalledException"

 public void onDestroy() { super.onDestroy(); eventsData.close(); } 

Это нужно вызвать, потому что класс Activity в android выполняет некоторую очистку сам по себе. Когда функции базового класса переопределяются производным классом, который является активностью, выполняемой в случае onDestroy (), функцию базового класса нужно явно вызывать для выполнения ожидаемой операции.

Я добавил эту строку, и все сработало нормально:

 super.onCreate(savedInstanceState); 

Добавлено его в первую строку в методе OnCreate() .

  @Override public void onDestroy() { super.onDestroy() eventsData.close(); } 

Я нашел решение для своей ситуации, где мне захотелось, чтобы полосы вкладок были анимированы, прежде чем разрешить продолжить onDestroy (). SuperNotCalledException будет выбрасываться только в том случае, если недопустимое поле mCalled не задано super.onDestroy (), но в исходном источнике было обнаружено, что публичный метод super.onDestroyView () ТОЛЬКО задает это поле – поэтому я сделал следующее, чтобы разрешить реальный супер .onDestroy () для вызова в endAction (я использую RetroLambda):

 @Override public void onDestroy() { super.onDestroyView(); //Calling this public method will prevent the android.support.v4.app.SuperNotCalledException when we don't immediately call the super.onDestroy - since it is in an endAction removeHeaderView(super::onDestroy); } 

Надеюсь, это поможет кому-то еще!

Добавьте этот код для метода onDestroy ().

 super.onDestroy(); 

Это сработало для меня.