J'utilise le framework ORMLite
sur un projet android et je suis bloqué en utilisant OpenHelperManager.getHelper()
sur plusieurs classes repo
.OpenHelperManager: - Définition de la nouvelle classe d'assistance lors de l'utilisation de plusieurs classes auxiliaires dans OpenHelperManager ORMLite android
Voici un bref de ma structure de code: -
DatabaseHelper
classe qui est responsable de la création et database
tables
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
public static String DATABASE_NAME = "muffet.db";
public static int DATABASE_VERSION = 5;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
// Creating tables
try {
TableUtils.createTable(connectionSource, Category.class);
TableUtils.createTable(connectionSource, Transaction.class);
TableUtils.createTable(connectionSource, Budget.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, Category.class, true);
TableUtils.dropTable(connectionSource, Transaction.class, true);
TableUtils.dropTable(connectionSource, Budget.class, true);
onCreate(database, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
TransactionRepo
qui est responsable de la base de données accès.
public class TransactionRepo extends DatabaseHelper {
// private Dao<Transaction, Integer> transactionDao = null;
private RuntimeExceptionDao<Transaction, Integer> transactionRuntimeDao = null;
public TransactionRepo(Context context) {
super(context);
}
public RuntimeExceptionDao<Transaction, Integer> getTransactionRuntimeDao(){
if(transactionRuntimeDao == null){
transactionRuntimeDao = getRuntimeExceptionDao(Transaction.class);
}
return transactionRuntimeDao;
}
/**
* Save Transaction to database
*/
public void save(Transaction transaction){
try {
transactionRuntimeDao = getTransactionRuntimeDao();
transactionRuntimeDao.createOrUpdate(transaction);
}catch(Exception e){
e.printStackTrace();
}
}
/**
* Get all list of data
*/
public List<Transaction> getAll(){
try{
transactionRuntimeDao = getTransactionRuntimeDao();
return transactionRuntimeDao.queryForAll();
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
TransactionServiceImpl
qui est une classe de service pour obtenir des données de la TransactionRepo
public class TransactionServiceImpl implements TransactionService {
TransactionRepo transactionRepo;
@Override
public void save(Transaction transaction, Activity activity) {
transactionRepo = OpenHelperManager.getHelper(activity, TransactionRepo.class);
transactionRepo.save(transaction);
OpenHelperManager.releaseHelper();
}
@Override
public List<Transaction> getAll(Activity activity) {
transactionRepo = OpenHelperManager.getHelper(activity, TransactionRepo.class);
List<Transaction> transactionList = transactionRepo.getAll();
OpenHelperManager.releaseHelper();
return transactionList;
}
}
Il fonctionne très bien quand je le lance. Mais quand je tente d'accéder à une autre repository
classe qui étend DatabaseHelper
, et utiliser le OpenHelperManager.getHelper()
comme par exemple: -
CategoryRepo categoryRepo = OpenHelperManager.getHelper(activity, CategoryRepo.class);
Je reçois erreur java.lang.IllegalStateException: Helper class was class com.muffet.persistence.repository.TransactionRepo but is trying to be reset to class com.muffet.persistence.repository.CategoryRepo
Cela signifie clairement que le OpenHelperManager
a sauvé instance de TransactionRepo
et quand j'essaie de l'obtenir et de le définir comme CategoryRepo
il est incapable de lancer ou quelque chose comme ça.
Comment puis-je résoudre ce problème?
Merci
est-ce pas ce qu'il ya quelqu'un qui peut répondre à la question? Ca fait des jours et je suis toujours coincé – viper