错误:android.app.SuperNotCalledException错误、android、SuperNotCalledException、app

2023-09-05 06:29:44 作者:赴約

我是android的新用户,我不得不做一个Android的数据库连接,然后创建表的应用程序,但是在运行时就会产生错误。 的错误是听到:

  07-15 16:25:55.404:ERROR / AndroidRuntime(3308):未捕获的处理程序:螺纹主力退出,由于未捕获的异常
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):android.app.SuperNotCalledException:活动{org.example.sqldemo / org.example.sqldemo.SQLDemo}没有要求通过对super.onDestroy()
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3134)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):输入code在这里android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3159)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在android.app.ActivityThread.access $ 2400(ActivityThread.java:112)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1724)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在android.os.Handler.dispatchMessage(Handler.java:99)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在android.os.Looper.loop(Looper.java:123)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在android.app.ActivityThread.main(ActivityThread.java:3948)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在java.lang.reflect.Method.invokeNative(本机方法)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在java.lang.reflect.Method.invoke(Method.java:521)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:782)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
 07-15 16:25:55.454:ERROR / AndroidRuntime(3308):在dalvik.system.NativeStart.main(NativeMethod)
 

SQLDemo.java 我的code是听到的:

 包com.dailynote;
 进口android.app.Activity;
 进口android.content.ContentValues​​;
 进口android.database.Cursor;
 进口android.database.sqlite.SQLiteDatabase;
 进口android.os.Bundle;
 进口android.widget.TextView;
 公共类SQLDemo延伸活动{
   EventDataSQLHelper eventsData;
   TextView的输出;
   @覆盖
   公共无效的onCreate(包savedInstanceState){
          super.onCreate(savedInstanceState);
     的setContentView(R.layout.output);
     输出=(TextView中)findViewById(R.id.textView1);
     eventsData =新EventDataSQLHelper(本);
     的addEvent(你好Android的事件);
     光标光标= getEvents();
     showEvents(光标);
   }
   @覆盖
   公共无效的onDestroy(){
     eventsData.close();
   }
   私人无效的addEvent(字符串名称){
     SQLiteDatabase DB = eventsData.getWritableDatabase();
     ContentValues​​值=新ContentValues​​();
     values​​.put(EventDataSQLHelper.TIME,System.currentTimeMillis的());
     values​​.put(EventDataSQLHelper.TITLE,职称);
     db.insert(EventDataSQLHelper.TABLE,空,价值观);
   }
   私人光标getEvents(){
     SQLiteDatabase DB = eventsData.getReadableDatabase();
     光标光标= db.query(EventDataSQLHelper.TABLE,NULL,NULL,NULL,NULL,
         NULL,NULL);
     startManagingCursor(光标);
     返回游标;
   }
   私人无效showEvents(光标指针){
     StringBuilder的RET =新的StringBuilder(保存事件:\ñ\ N);
     而(cursor.moveToNext()){
       长ID = cursor.getLong(0);
       很长一段时间= cursor.getLong(1);
       字符串标题= cursor.getString(2);
       ret.append(ID +:+时间+:+标题+\ N);
     }
     output.setText(RET);
   }
 }
 

EventDataSQLHelper.java

 包com.dailynote;
 进口android.content.Context;
 进口android.database.sqlite.SQLiteDatabase;
 进口android.database.sqlite.SQLiteOpenHelper;
 进口android.provider.BaseColumns;
 进口android.util.Log;
 / **助手到数据库,管理版本和创造* /
 公共类EventDataSQLHelper扩展SQLiteOpenHelper {
    私有静态最后弦乐DATABASE_NAME =events.db;
    私有静态最终诠释DATABASE_VERSION = 1;
    //表的名字
    公共静态最终字符串表=事件;
    //列
    公共静态最后弦乐时间=时间;
    公共静态最后弦乐TITLE =称号;
    公共EventDataSQLHelper(上下文的背景下){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    }
    @覆盖
    公共无效的onCreate(SQLiteDatabase DB){
        字符串SQL =创建表+表+(+ BaseColumns._ID
            +整数主键自动增量,+时间+整数
                +标题+的文字NOT NULL);;
        Log.d(EventsData,的onCreate:+ SQL);
        db.execSQL(SQL);
    }
    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        如果(oldVersion> =静态网页)
            返回;
        字符串SQL = NULL;
        如果(oldVersion == 1)
            SQL =ALTER TABLE+表+添加注释文本;;
        如果(oldVersion == 2)
            SQL =;
        Log.d(EventsData,onUpgrade:+ SQL);
        如果(SQL!= NULL)
            db.execSQL(SQL);
    }
 }
 
Android App

解决方案

 公共无效的onDestroy(){
    super.onDestroy();
    eventsData.close();
}
 

这是被称为,因为在Android的Activity类确实本身一些清理工作。 当基类的功能由派生类的活动为已完成的情况下的onDestroy的覆盖(),基类的函数需要显式调用执行预期的操作。

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.

 
精彩推荐
图片推荐