错误:android.app.SuperNotCalledException

我是Android的新用户,我已经使一个Android数据库连接,并创build表应用程序,但在运行时,它会产生一个错误。
听到一个错误是:

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

Related of "错误:android.app.SuperNotCalledException"

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

这是要被调用的,因为android中的Activity类自己做一些清理。 当在onDestroy()的情况下,基类函数被作为活动的派生类覆盖时,需要显式调用基类函数以执行期望的操作。

我添加了这一行,一切正常工作:

 super.onCreate(savedInstanceState); 

将其添加到OnCreate()方法的第一行。

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

我发现我的情况的解决scheme,我希望在允许onDestroy()继续之前使标签栏动起来。 SuperNotCalledException仅在super.onDestroy()未设置不可访问的mCalled字段时抛出,但在源代码中挖掘显示公共方法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(); 

它为我工作。