E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example



>我正在尝试通过SQLiteOpenHelper将值插入SQLite上的数据库,因为应用程序关闭了。

我正在Android工作室上使用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运行时:致命异常:main 进程: 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

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

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

也就是说,AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 5);使用了,但现在使用了AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1);(第 4 个参数是5,但现在是1)。

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

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

另一个修复可能是覆盖onUpgrade方法(可能什么都不做),然后版本应设置为1,数据将被保留。

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

相关内容

最新更新