不兼容类型:推断类型不符合上限推断:Dao<Account,String> 上限
incompatible types: inferred type does not conform to upper bound(s) inferred: Dao<Account,String> upper bound(s)
我正在我的 Android Studio 项目的现有数据库上实施 ORMLite...一切都已完成,但现在我正在进行升级,我使用 DAO,但我收到此错误:
Error:(67, 68) error: incompatible types: inferred type does not conform to upper bound(s)
inferred: Dao
upper bound(s): Dao,Dao
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final int DATABASE_VERSION = ...;
private static final String DATABASE_NAME = "...";
public SQLiteDatabase sqLiteDatabase;
private Context mContext;
Dao<Account, String> daoDemandes;
private static final String TABLE_DEMANDES = "demandes";
private static final String KEY_ID = "id";
private static final String KEY_XML_SENDLEAD = "xmlSendLead";
private static final String KEY_STATUTENVOIE_SENDLEAD = "statutEnvoieSendLead";
private static final String KEY_DATEENVOIE_SENDLEAD = "dateEnvoieSendLead";
private static final String KEY_CONTACTWEBID = "contactWebId";
private static final String KEY_XML_SIMULATION = "xmlSimulation";
private static final String KEY_STATUTENVOIE_SIMULATION = "statutEnvoieSimulation";
private static final String KEY_DATEENVOIE_SIMULATION = "dateEnvoieSimulation";
private Dao<Demandes, Integer> simpleDao = null;
private RuntimeExceptionDao<Demandes, Integer> simpleRuntimeDao = null;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource){
try {
TableUtils.createTable(connectionSource, Demandes.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
Dao<Account, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);
if (oldVersion < 4) {
daoDemandes.executeRaw("ALTER TABLE " + TABLE_DEMANDES + " RENAME TO demandes2");
daoDemandes.executeRaw("CREATE TABLE " + TABLE_DEMANDES + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_XML_SENDLEAD + " TEXT," + KEY_STATUTENVOIE_SENDLEAD + " INTEGER," + KEY_DATEENVOIE_SENDLEAD + " DATETIME," + KEY_CONTACTWEBID + " INTEGER," + KEY_XML_SIMULATION + " TEXT," + KEY_STATUTENVOIE_SIMULATION + " INTEGER," + KEY_DATEENVOIE_SIMULATION + " DATETIME" + ")");
daoDemandes.executeRaw("INSERT INTO " + TABLE_DEMANDES + " (" + KEY_ID + "," + KEY_XML_SENDLEAD + "," + KEY_STATUTENVOIE_SENDLEAD + "," + KEY_DATEENVOIE_SENDLEAD + ")" + " SELECT id, xml, statutEnvoie, dateEnvoie" + " FROM demandes2;");
daoDemandes.executeRaw("DROP TABLE demandes2");
System.out.println("v4 parsed");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Dao<Account, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);
您正在尝试创建一个 Dao<Account,String>
,但您正在为 class Demandes
创建一个 DAO。那应该是:
Dao<Demandes, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);
里面的String
应该是Demandes
的id类型,可以是Long
或者Integer
。
你应该已经能够自己解决这个问题了。也许您需要了解有关 how generics work 的更多信息?调试代码时,您应该能够通过仔细查看导致异常的行来评估问题。
另一件可以尝试的事情是删除 daoDemandes
之前的类型规范,并允许您的 IDE 自行生成它。那会奏效的。
我正在我的 Android Studio 项目的现有数据库上实施 ORMLite...一切都已完成,但现在我正在进行升级,我使用 DAO,但我收到此错误:
Error:(67, 68) error: incompatible types: inferred type does not conform to upper bound(s) inferred: Dao upper bound(s): Dao,Dao
Error:Execution failed for task ':app:compileDebugJavaWithJavac'. Compilation failed; see the compiler error output for details.
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final int DATABASE_VERSION = ...;
private static final String DATABASE_NAME = "...";
public SQLiteDatabase sqLiteDatabase;
private Context mContext;
Dao<Account, String> daoDemandes;
private static final String TABLE_DEMANDES = "demandes";
private static final String KEY_ID = "id";
private static final String KEY_XML_SENDLEAD = "xmlSendLead";
private static final String KEY_STATUTENVOIE_SENDLEAD = "statutEnvoieSendLead";
private static final String KEY_DATEENVOIE_SENDLEAD = "dateEnvoieSendLead";
private static final String KEY_CONTACTWEBID = "contactWebId";
private static final String KEY_XML_SIMULATION = "xmlSimulation";
private static final String KEY_STATUTENVOIE_SIMULATION = "statutEnvoieSimulation";
private static final String KEY_DATEENVOIE_SIMULATION = "dateEnvoieSimulation";
private Dao<Demandes, Integer> simpleDao = null;
private RuntimeExceptionDao<Demandes, Integer> simpleRuntimeDao = null;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
}
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource){
try {
TableUtils.createTable(connectionSource, Demandes.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
Dao<Account, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);
if (oldVersion < 4) {
daoDemandes.executeRaw("ALTER TABLE " + TABLE_DEMANDES + " RENAME TO demandes2");
daoDemandes.executeRaw("CREATE TABLE " + TABLE_DEMANDES + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_XML_SENDLEAD + " TEXT," + KEY_STATUTENVOIE_SENDLEAD + " INTEGER," + KEY_DATEENVOIE_SENDLEAD + " DATETIME," + KEY_CONTACTWEBID + " INTEGER," + KEY_XML_SIMULATION + " TEXT," + KEY_STATUTENVOIE_SIMULATION + " INTEGER," + KEY_DATEENVOIE_SIMULATION + " DATETIME" + ")");
daoDemandes.executeRaw("INSERT INTO " + TABLE_DEMANDES + " (" + KEY_ID + "," + KEY_XML_SENDLEAD + "," + KEY_STATUTENVOIE_SENDLEAD + "," + KEY_DATEENVOIE_SENDLEAD + ")" + " SELECT id, xml, statutEnvoie, dateEnvoie" + " FROM demandes2;");
daoDemandes.executeRaw("DROP TABLE demandes2");
System.out.println("v4 parsed");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Dao<Account, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);
您正在尝试创建一个 Dao<Account,String>
,但您正在为 class Demandes
创建一个 DAO。那应该是:
Dao<Demandes, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);
里面的String
应该是Demandes
的id类型,可以是Long
或者Integer
。
你应该已经能够自己解决这个问题了。也许您需要了解有关 how generics work 的更多信息?调试代码时,您应该能够通过仔细查看导致异常的行来评估问题。
另一件可以尝试的事情是删除 daoDemandes
之前的类型规范,并允许您的 IDE 自行生成它。那会奏效的。