Модуль работы с базой данных
История переводов, избранные переводы, а также оффлайн переводы должны где-то храниться. Самое верное для этого решение, хранить все это в базе данных.
База данных в Android представлена в виде SQLite.Для удобной работы с БД был написан модуль, имеющий методы:
· reset () - Метод очистки БД
· insert() - Метод помещающий результат перевода в БД
· setIsFavorite() - Метод добавляющий/убирающий в избранное перевод
· getHistory() - Метод возвращающий историю всех переводов.
· getTranslate() - Метод возвращающий перевод для слова/предложения (Оффлайн переводчик)
· dbCount() – Метод возвращающий кол-во строк в БД
Листинг основных методов:
/**
* Метод помещающий результат перевода в БД
* @param result Результат перевода в виде TranslateResultModel
* */
public void insert(TranslateResultModel result)
{
SQLiteDatabase dataBase = getWritableDatabase(); /** Открывает экземпляр базы данных */
ContentValues contentValues = new ContentValues(); /** Формирую сроку */
contentValues.put(FROM_TEXT,result.from);
contentValues.put(TO_TEXT,result.to);
contentValues.put(LANG,result.lang);
contentValues.put(IS_FAVORITE,(result.favorite) ? 1 : 0);
dataBase.insert(TABLE_RESULTS,null,contentValues); /** Добавляю в бд */
dataBase.close();
}
/**
* Метод добавляющий/убирающий в избранное перевод
* @param id ID результата перевода в БД
* @param state Значение
* */
public void setIsFavorite(int id, boolean state)
{
SQLiteDatabase dataBase = getWritableDatabase();
Cursor c = dataBase.query(TABLE_RESULTS, null,"_id = " + id,null,null,null,null,null);
if(c.moveToFirst()) {
do {
ContentValues contentValues = new ContentValues();
int idFrom =c.getColumnIndex(FROM_TEXT);
int idTo = c.getColumnIndex(TO_TEXT);
int idLang = c.getColumnIndex(LANG);
contentValues.put(FROM_TEXT,c.getString(idFrom));
contentValues.put(TO_TEXT,c.getString(idTo));
contentValues.put(LANG,c.getString(idLang));
contentValues.put(IS_FAVORITE,(state) ? 1 : 0);
/** Обновляю БД */
dataBase.update(TABLE_RESULTS,contentValues,"_id = " + id,null);
}
while (c.moveToNext());
}
}
/**
* Метод возвращающий историю всех переводов.
* @param text Текст перевода. Может отсутствовать,но тогда будет возвращены все значения
* @param favorite В избранном
* */
public ArrayList<TranslateResultModel> getHistory(String text, boolean favorite)
{
ArrayList<TranslateResultModel> results = new ArrayList<>();
SQLiteDatabase dataBase = getReadableDatabase();
Cursor c = null;
String filter = '%' + text + '%';
if(favorite) {
if (TextUtils.isEmpty(text))
c = dataBase.query(TABLE_RESULTS, null, "_favorite=1", null, null, null, null, null);
else
c = dataBase.query(TABLE_RESULTS, null, "_from LIKE (?) OR _to LIKE (?) AND _favorite=1"
, new String[]{filter,filter}, null, null, null, null);
}
else{
if (TextUtils.isEmpty(text))
c = dataBase.query(TABLE_RESULTS, null, null, null, null, null, null, null);
else
c = dataBase.query(TABLE_RESULTS, null, "_from LIKE (?) or _to LIKE (?)"
, new String[]{filter,filter}, null, null, null, null);
}
if(c.moveToLast()) {
do {
int idFrom =c.getColumnIndex(FROM_TEXT);
int idTo = c.getColumnIndex(TO_TEXT);
int idLang = c.getColumnIndex(LANG);
int idFavorite = c.getColumnIndex(IS_FAVORITE);
int idID = c.getColumnIndex(KEY_ID);
results.add(new TranslateResultModel(c.getString(idFrom),c.getString(idTo),
c.getString(idLang),(c.getInt(idFavorite) == 1),c.getInt(idID)));
}
while (c.moveToPrevious());
}
dataBase.close();
return results;
}
/**
* Метод возвращающий перевод для слова/предложения (Оффлайн переводчик)
* @param text Текст перевода.
* @param lang Язык перевода
* */
public ArrayList<TranslateResultModel> getTranslate(String text, String lang)
{
ArrayList<TranslateResultModel> results = new ArrayList<>();
SQLiteDatabase dataBase = getReadableDatabase(); //Открывает экземпляр базы данных
Cursor c = null;
c = dataBase.query(TABLE_RESULTS, null,"_lang=\"" + lang + "\" and _from=\"" + text + "\""
, null, null, null, null, null);
if(c.moveToFirst()) {
do {
int idFrom =c.getColumnIndex(FROM_TEXT);
int idTo = c.getColumnIndex(TO_TEXT);
int idLang = c.getColumnIndex(LANG);
int idFavorite = c.getColumnIndex(IS_FAVORITE);
int idID = c.getColumnIndex(KEY_ID);
results.add(new TranslateResultModel(c.getString(idFrom),c.getString(idTo),
c.getString(idLang),(c.getInt(idFavorite) == 1),c.getInt(idID)));
}
while (c.moveToNext());
}
dataBase.close();
return results;
}