不兼容的类型:推断类型不符合推断的上限:Dao <account,string> upper bound(s)

时间:2017-02-09 15:41:59

标签: android ormlite

我在Android Studio项目的现有数据库上实现了ORMLite ...一切都已完成,但现在我正在进行升级,我使用DAO但是我收到了这个错误:< / p>

  

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

     

错误:任务&#39;:app:compileDebugJavaWithJavac&#39;执行失败。   编译失败;有关详细信息,请参阅编译器错误输出。

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();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

 Dao<Account, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);

您正在尝试创建Dao<Account,String>,但您正在为班级Demandes创建DAO。那应该是:

Dao<Demandes, String> daoDemandes = DaoManager.createDao(connectionSource, Demandes.class);

String中的Demandes应该是Long的ID类型,可以是IntegerdaoDemandes

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

要尝试的另一件事是从 import turtle t=turtle.Turtle() s=turtle.Screen() t.forward(200) t.penup() t.home() t.right(90) t.forward(50) t.pendown() t.left(90) t.forward(200) '''i suppose i dont have to go home and then down. instead just continue and go down and forward left. but either way, is this the best approach to take? ''' 之前删除类型规范,并允许IDE自己生成它。那会有效。