Ниже приведен рабочий пример, который даст значение слова, введенного в текст редактирования, в соответствии с нажатой кнопкой.
Например, если введено Да и Eng-> При нажатии кнопки Fr будет сказано: Слово Да означает Oui по-французски. .Если нажата кнопка Fr-> Eng , она скажет, что Слово Да означает, что я не знаю по-английски. (т.е. нет смысла в дана французском).
Разговорный ввод Oui скажет Слово Oui означает Да на английском языке или Oui означает, что я надеваюне знаю по-французски.
MyDatabaseHelper.java
Это подкласс SQLiteOpenHelper, который является типичным способом доступа к базе данных SQLite в Android: -
public class MyDBHelper extends SQLiteOpenHelper {
public static final String DBNAME = "translator";
public static final int DBVERSION = 1;
public static final String TBL_ENGFR = "engfr";
public static final String TBL_FRENG = "freng";
public static final String COL_ID = BaseColumns._ID;
public static final String COL_WORD = "word";
public static final String COl_MEANING = "meaning";
public static final int TRANSLATOR_TYPE_ENGLISH_TO_FRENCH = 0;
public static final int TRANSLATOR_TYPE_FRENCH_TO_ENGLISH = 1;
SQLiteDatabase mDB;
public MyDBHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
mDB = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(crt_table_sql(getTableToUse(TRANSLATOR_TYPE_ENGLISH_TO_FRENCH)));
db.execSQL(crt_table_sql(getTableToUse(TRANSLATOR_TYPE_FRENCH_TO_ENGLISH)));
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public String getMeaningOfWord(String word, int type) {
String rv = "";
String whereclause = COL_WORD + "=?";
String[] whereargs = new String[]{word};
Cursor csr = mDB.query(getTableToUse(type),null,whereclause,whereargs,null,null,null);
if (csr.moveToFirst()) {
rv = csr.getString(csr.getColumnIndex(COl_MEANING));
}
csr.close();
return rv;
}
public long addWord(String word, String meaning,int type) {
ContentValues cv = new ContentValues();
cv.put(COL_WORD,word);
cv.put(COl_MEANING,meaning);
return mDB.insert(getTableToUse(type),null,cv);
}
private String crt_table_sql(String table) {
return "CREATE TABLE IF NOT EXISTS " + table + "(" +
COL_ID + " INTEGER PRIMARY KEY, " +
COL_WORD + " TEXT, " +
COl_MEANING + " TEXT" +
")";
}
private String getTableToUse(int type) {
String rv = "";
switch (type) {
case TRANSLATOR_TYPE_ENGLISH_TO_FRENCH:
rv = TBL_ENGFR;
break;
case TRANSLATOR_TYPE_FRENCH_TO_ENGLISH:
rv = TBL_FRENG;
break;
}
return rv;
}
}
Во всех случаях базовая таблица определяется в соответствии со значением int (0 (с английского на французский) или 1 (с французского на английский)), как представлено двумя константами, определенными помощником.
Константы также используются кнопками в основном упражнении для определения языка значения.
MainActivity.java
В этом упражнении есть 3 элемента пользовательского интерфейса, текст редактирования для ввода слова идве кнопки.При нажатии на одну из них будет использоваться соответствующая таблица для определения значения слова.
public class MainActivity extends AppCompatActivity {
EditText mWordToGetMeaningOf;
Button mENG_TO_FR, mFR_TO_ENG;
Context mContext;
String mCurrentmeaning;
MyDBHelper mDBhlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
mWordToGetMeaningOf = this.findViewById(R.id.word_to_get_meaning_of);
mENG_TO_FR = this.findViewById(R.id.eng_to_fr);
mFR_TO_ENG = this.findViewById(R.id.fr_to_eng);
mDBhlpr = new MyDBHelper(this);
addSomeData();
mENG_TO_FR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurrentmeaning = mDBhlpr.getMeaningOfWord(mWordToGetMeaningOf.getText().toString(),MyDBHelper.TRANSLATOR_TYPE_ENGLISH_TO_FRENCH);
displayMeaning(MyDBHelper.TRANSLATOR_TYPE_ENGLISH_TO_FRENCH);
}
});
mFR_TO_ENG.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurrentmeaning = mDBhlpr.getMeaningOfWord(mWordToGetMeaningOf.getText().toString(),MyDBHelper.TRANSLATOR_TYPE_FRENCH_TO_ENGLISH);
displayMeaning(MyDBHelper.TRANSLATOR_TYPE_FRENCH_TO_ENGLISH);
}
});
}
/**
* Toasts the meaning of the word (also writes the same message to the log)
* @param type
*/
private void displayMeaning(int type) {
String meaning_type = "";
switch (type) {
case MyDBHelper.TRANSLATOR_TYPE_ENGLISH_TO_FRENCH:
meaning_type = "French";
break;
case MyDBHelper.TRANSLATOR_TYPE_FRENCH_TO_ENGLISH:
meaning_type = "English";
break;
}
if (mCurrentmeaning.length() < 1) {
mCurrentmeaning = " I don't know ";
}
String message = "The Word " +
mWordToGetMeaningOf.getText().toString() +
" means " + mCurrentmeaning +
" in " + meaning_type + ".";
Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
Log.d("MEANING",message);
}
/**
* Add some testing data
*/
private void addSomeData() {
mDBhlpr.addWord("Yes","Oui",MyDBHelper.TRANSLATOR_TYPE_ENGLISH_TO_FRENCH);
mDBhlpr.addWord("Oui","Yes",MyDBHelper.TRANSLATOR_TYPE_FRENCH_TO_ENGLISH);
}
}