- •Курсовая работа
- •3 Разработка основных модулей приложения 7
- •1. Техническое Задание
- •2.Описание и обоснование
- •2.1 Выбор технологии разработки приложение
- •3 Разработка основных модулей приложения
- •3.1 Модуль работы с сервисом перевода текста
- •3.2 Модуль работы с сервисом словаря
- •3.3 Модуль работы с базой данных
- •4 Разработка основного функционала
3.3 Модуль работы с базой данных
История переводов, избранные переводы, а также оффлайн переводы должны где-то храниться. Самое верное для этого решение, хранить все это в базе данных.
База данных в 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;
}
