直接上错误日志:
2020-03-11 18:20:16.647 15661-15661/com.xiayiye.takeout W/System.err: java.lang.IllegalArgumentException: Can't find a no-arg constructor for class com.xiayiye.takeout.model.beans.Data
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.table.DatabaseTableConfig.findNoArgConstructor(DatabaseTableConfig.java:210)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.table.DatabaseTableConfig.getConstructor(DatabaseTableConfig.java:141)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.table.TableInfo.<init>(TableInfo.java:94)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:158)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:132)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:123)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.dao.BaseDaoImpl$6.<init>(BaseDaoImpl.java:1055)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:1055)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:72)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.table.TableUtils.createTable(TableUtils.java:54)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.xiayiye.takeout.model.dao.TakeOutOpenHelper.onCreate(TakeOutOpenHelper.kt:56)
2020-03-11 18:20:16.648 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.onCreate(OrmLiteSqliteOpenHelper.java:207)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:68)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.j256.ormlite.dao.BaseDaoImpl.create(BaseDaoImpl.java:326)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.xiayiye.takeout.model.dao.AddressDao.addReceiptAddressBean(AddressDao.kt:59)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.xiayiye.takeout.ui.activity.AddReceiptAddressActivity.addAddress(AddReceiptAddressActivity.kt:133)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.xiayiye.takeout.ui.activity.AddReceiptAddressActivity.clickOk(AddReceiptAddressActivity.kt:119)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.xiayiye.takeout.ui.activity.AddReceiptAddressActivity.access$clickOk(AddReceiptAddressActivity.kt:55)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.xiayiye.takeout.ui.activity.AddReceiptAddressActivity$initListener$6.onClick(AddReceiptAddressActivity.kt:78)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.view.View.performClick(View.java:5644)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.view.View$PerformClick.run(View.java:22440)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.os.Looper.loop(Looper.java:154)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6166)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2020-03-11 18:20:16.649 15661-15661/com.xiayiye.takeout W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
使用ormLite数据库报错,提示找不到无参构造
解决方法非常简单:
报错的bean
package com.xiayiye.takeout.model.beans
import com.j256.ormlite.field.DatabaseField
import com.j256.ormlite.table.DatabaseTable
import java.io.Serializable
@DatabaseTable(tableName = "t_user")
class Data : Serializable {
@DatabaseField(columnName = "balance")
var balance: Double = 0.0
@DatabaseField(columnName = "discount")
var discount: Int = 0
@DatabaseField(id = true)
var id: Int = 0
@DatabaseField(columnName = "integral")
var integral: Int = 0
@DatabaseField(columnName = "name")
var name: String = ""
@DatabaseField(columnName = "phone")
var phone: String = ""
constructor(
balance: Double,
discount: Int,
id: Int,
integral: Int,
name: String,
phone: String
){
this.balance = balance
this.discount = discount
this.id = id
this.integral = integral
this.name = name
this.phone = phone
}
}
更正后的bean
package com.xiayiye.takeout.model.beans
import com.j256.ormlite.field.DatabaseField
import com.j256.ormlite.table.DatabaseTable
import java.io.Serializable
@DatabaseTable(tableName = "t_user")
class Data() : Serializable {
@DatabaseField(columnName = "balance")
var balance: Double = 0.0
@DatabaseField(columnName = "discount")
var discount: Int = 0
@DatabaseField(id = true)
var id: Int = 0
@DatabaseField(columnName = "integral")
var integral: Int = 0
@DatabaseField(columnName = "name")
var name: String = ""
@DatabaseField(columnName = "phone")
var phone: String = ""
constructor(
balance: Double,
discount: Int,
id: Int,
integral: Int,
name: String,
phone: String
) : this() {
this.balance = balance
this.discount = discount
this.id = id
this.integral = integral
this.name = name
this.phone = phone
}
}
只需要再class上面加个"()"无参构造,然后让实现的构造方法继承this()即可
修改后看下成功的log
2020-03-11 18:29:01.814 16519-16519/com.xiayiye.takeout I/TableUtils: creating table 't_address'
2020-03-11 18:29:01.819 16519-16519/com.xiayiye.takeout I/TableUtils: executed create table statement changed 0 rows: CREATE TABLE `t_address` (`address` VARCHAR , `detailAddress` VARCHAR , `id` INTEGER PRIMARY KEY AUTOINCREMENT , `label` VARCHAR , `phone` VARCHAR , `phoneOther` VARCHAR , `sex` VARCHAR , `userId` VARCHAR , `userName` VARCHAR )
2020-03-11 18:29:01.829 16519-16519/com.xiayiye.takeout I/TableUtils: creating table 't_user'
2020-03-11 18:29:01.831 16519-16519/com.xiayiye.takeout I/TableUtils: executed create table statement changed 0 rows: CREATE TABLE `t_user` (`balance` DOUBLE PRECISION , `discount` INTEGER , `id` INTEGER , `integral` INTEGER , `name` VARCHAR , `phone` VARCHAR , PRIMARY KEY (`id`) )
2020-03-11 18:29:01.861 16519-16519/com.xiayiye.takeout D/InputTransport: tzyl sample state about factory normal
2020-03-11 18:30:04.404 16519-16519/com.xiayiye.takeout W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
2020-03-11 18:30:04.708 16519-16519/com.xiayiye.takeout D/JIGUANG-JCore: [JCoreHelper] runActionWithService action:change_foreground
2020-03-11 18:30:51.296 16519-16524/com.xiayiye.takeout I/art: Do full code cache collection, code=121KB, data=123KB
2020-03-11 18:30:51.296 16519-16524/com.xiayiye.takeout I/art: Starting a blocking GC JitCodeCache
2020-03-11 18:30:51.297 16519-16524/com.xiayiye.takeout I/art: After code cache collection, code=102KB, data=84KB
2020-03-11 19:00:45.433 16519-16524/com.xiayiye.takeout I/art: Do partial code cache collection, code=122KB, data=104KB
2020-03-11 19:00:45.434 16519-16524/com.xiayiye.takeout I/art: After code cache collection, code=122KB, data=104KB
2020-03-11 19:00:45.434 16519-16524/com.xiayiye.takeout I/art: Increasing code cache capacity to 512KB