E / Android运行时:致命异常:主要过程:com.example.appmediocurso,PID:2740

时间:2019-04-26 22:30:54

标签: android sqlite

我正在尝试通过应用关闭的SQLiteOpenHelper将值插入SQLite上的数据库中。

我正在使用Android Studio上的SQLiteOpenHelper,并使用活动在数据库中插入值,当我第一次进入活动时,我可以插入所有想要的值,但是当我出门时,重新输入活动,然后按一下在表格中插入值的“ Registar”按钮,应用程序将关闭而不显示Toast消息。

公共无效注册商(视图){

Toast.makeText(this,“ Entro al registrar”,Toast.LENGTH_SHORT).show();

    AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1);

    SQLiteDatabase bd = admin.getWritableDatabase(); <- in this line close

'''''  ''''' }

日志模块

E / Android运行时:致命异常:主要     流程:com.example.appmediocurso,PID:2740

java.lang.IllegalStateException: Could not execute method for android:onClick
    at $DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
    at android.view.View.performClick(View.java:6205)
    at android.widget.TextView.performClick(TextView.java:11103)
    at android.view.View$PerformClick.run(View.java:23653)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6682)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:6205) 
    at android.widget.TextView.performClick(TextView.java:11103) 
    at android.view.View$PerformClick.run(View.java:23653) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6682) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

 Caused by: android.database.sqlite.SQLiteException: Can't downgrade database from version 5 to 1
    at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:360)
    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:254)
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)

    at com.example.appmediocurso.NuevoDeudor.Registrar(NuevoDeudor.java:57)

    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
    at android.view.View.performClick(View.java:6205) 
    at android.widget.TextView.performClick(TextView.java:11103) 
    at android.view.View$PerformClick.run(View.java:23653) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6682) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 

E /看门狗:!@Sync 4269 [26_abr_16_41_35.985] E / wifi:无法获取频道列表:-95

我只是希望插入值,即使这是我第三次输入活动。

1 个答案:

答案 0 :(得分:0)

原因是,在失败的运行之前,数据库的版本号设置为 5 ,但是现在您尝试使用版本 1 ,而不覆盖SQliteOpenHelper的 onDowngrade 方法;如果不进行覆盖,则会按预期那样导致遇到的异常,因为通常不会减少版本号。

即使用了AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 5);,但现在使用了AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1);(第四个参数为 5 ,但现在为 1 )。

您可以再次使用5作为版本号来解决此问题。

另一个解决方法是卸载应用程序或删除应用程序的数据,然后在不更改版本的情况下重新运行该应用程序。请注意,这将导致所有数据丢失。

另一种解决方法是覆盖 onUpgrade 方法(也许什么也不做),然后将版本设置为1,并保留数据。

还有其他方法可以解决此问题,但是它们会稍微复杂一些,并且与上述修复方法相比没有任何优势。