2017-02-09 3 views
0

私はAndroid Studioプロジェクトの既存のデータベースにORMLiteを実装しています...すべて完了しましたが、今私は、アップグレードに取り組んでいる、SI私はDAOで動作するが、私はこのエラーを取得:互換性のない型:推定された型が推定上限に適合しないDao <Account、String>上限値

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

} 

答えて

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

あなたはDao<Account,String>を作成しようとしているが、あなたがのためにDAOを作成していますクラスDemandes。それは次のようになりますLong又はIntegerかもしれDemandesのIDタイプがあるはず

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

Stringに。

あなた自身でこの問題を把握できたはずです。たぶんhow generics workについてもっと知る必要がありますか?コードをデバッグするときには、例外の原因となった行を注意深く調べることで問題を評価できるはずです。

もう1つのことは、タイプ指定をdaoDemandesより先に削除し、IDEが自己生成できるようにすることです。それはうまくいったでしょう。

関連する問題