我正在尝试通过应用关闭的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
我只是希望插入值,即使这是我第三次输入活动。
答案 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,并保留数据。
还有其他方法可以解决此问题,但是它们会稍微复杂一些,并且与上述修复方法相比没有任何优势。