Android 不兼容类型:推断类型不符合上限推断:Dao<;帐户,字符串>;上限(s)

Android 不兼容类型:推断类型不符合上限推断:Dao<;帐户,字符串>;上限(s),android,ormlite,Android,Ormlite,我正在Android Studio项目的现有数据库上实现ORMLite。。。一切都完成了,但现在我正在进行升级,我使用DAO,但我得到了以下错误: 错误:(67,68)错误:不兼容的类型:推断的类型不符合上限 推断:道 上界:道,道 错误:任务“:app:compiledBugJavaWithJavaC”的执行失败。 编译失败;有关详细信息,请参阅编译器错误输出 公共类DatabaseHelper扩展了OrmLiteSqliteOpenHelper{ 私有静态最终int数据库_版本=。。。; 私

我正在Android Studio项目的现有数据库上实现ORMLite。。。一切都完成了,但现在我正在进行升级,我使用DAO,但我得到了以下错误:

错误:(67,68)错误:不兼容的类型:推断的类型不符合上限 推断:道 上界:道,道

错误:任务“:app:compiledBugJavaWithJavaC”的执行失败。 编译失败;有关详细信息,请参阅编译器错误输出

公共类DatabaseHelper扩展了OrmLiteSqliteOpenHelper{
私有静态最终int数据库_版本=。。。;
私有静态最终字符串数据库_NAME=“…”;
公共SQLITE数据库SQLITE数据库;
私有上下文;
道道德斯;
私有静态最终字符串表\u DEMANDES=“DEMANDES”;
私有静态最终字符串密钥\u ID=“ID”;
私有静态最终字符串键\u XML\u SENDLEAD=“xmlSendLead”;
私有静态最终字符串键\u stattenvoie\u SENDLEAD=“stattenvoiesendlead”;
私有静态最终字符串键\u DATEENVOIE\u SENDLEAD=“dateenvoisendlead”;
私有静态最终字符串密钥\u CONTACTWEBID=“CONTACTWEBID”;
私有静态最终字符串密钥\u XML\u SIMULATION=“xmlSimulation”;
私有静态最终字符串密钥\u statenvoie\u SIMULATION=“statenvoiesimulation”;
私有静态最终字符串键\u DATEENVOIE\u SIMULATION=“dateEnvoieSimulation”;
私有Dao simpleDao=null;
私有运行时ExceptionDAO simpleRuntimeDao=null;
公共数据库助手(上下文){
super(上下文、数据库名称、null、数据库版本、R.raw.ormlite\u配置);
}
@凌驾
public void onCreate(SQLiteDatabase db,ConnectionSource ConnectionSource){
试一试{
TableUtils.createTable(connectionSource,Demandes.class);
}捕获(SQLE异常){
e、 printStackTrace();
}
}
@凌驾
public void onUpgrade(SQLiteDatabase db、ConnectionSource ConnectionSource、int oldVersion、int newVersion){
试一试{
Dao-daodemdes=DaoManager.createDao(connectionSource,Demandes.class);
如果(旧版本<4){
daoDemandes.executeRaw(“ALTER TABLE”+TABLE_DEMANDES+“重命名为demandes2”);
daoDemandes.executeRaw(“创建表”+表DEMANDES+”(“+KEY\u ID+”整型主键“+KEY\u XML\u SENDLEAD+”文本“+KEY\u stattenvoie\u SENDLEAD+”整型“+KEY\u DATEENVOIE\u SENDLEAD+”日期时间“+KEY\u CONTACTWEBID+”整型“+KEY\u XML\u仿真+”文本“+KEY\u stattenvoie\u仿真+”整型“+KEY\u DATEENVOIE\u仿真”+”“日期时间”+”);
DEMANDES.executeRaw(“插入“+表DEMANDES+”(“+KEY\u ID+”、“+KEY\u XML\u SENDLEAD+”、“+KEY\u statenvoie\u SENDLEAD+”、“+KEY\u DATEENVOIE\u SENDLEAD+”)+“从demandes2中选择ID、XML、statenvoie、DATEENVOIE”+”;
daoDemandes.executeRaw(“删除表demandes2”);
System.out.println(“v4已解析”);
}
}捕获(SQLE异常){
e、 printStackTrace();
}
}
}
其中的
字符串
应该是
Demandes
的id类型,可以是
长的
整数

您应该能够自己解决这个问题。也许您需要了解更多信息?在调试代码时,您应该能够通过仔细查看导致异常的行来评估问题

另一种尝试是从daoDemandes之前删除类型规范,并允许IDE自行生成它。这样做是可行的

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<Demandes, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);