Не удается разрешить метод makeText()
У меня возникла проблема при попытке сделать тост в моем классе DatabaseHelper в моем проекте Android в разделе try / catch. Я пробовал следующие способы:
Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
Toast.makeText(DatabaseHelper.this, "", Toast.LENGTH_SHORT).show();
Toast.makeText(DatabaseHelper.this.getApplicationContext(), "", Toast.LENGTH_SHORT).show();
И никто из них не работает.
Вот код, где я пытаюсь сделать тост
public void criaConta(String nome, String password){
SQLiteDatabase db = this.getWritableDatabase();
try {
db.execSQL("INSERT INTO " + TABLE_NAME + " (" + COL2 + "," + COL3 + "," + COL4 + "," + COL5 + ") VALUES ('" + nome + "','" + password + "',0,0);");
}catch(Exception e){
Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
Log.i("ErroCriarConta", "criaConta: "+e);
}
//Toast.makeText(DatabaseHelper.this,"Conta Criada",Toast.LENGTH_LONG).show();
}
Заранее благодарю всех, кто хочет помочь.
1 ответ
Как отметил пользователь Mike M. в своем комментарии, вы не должны смешивать вещи, связанные с пользовательским интерфейсом, с вашим управлением данными. Вместо этого я предлагаю вам взглянуть на шаблон проектирования ViewModel. Используя класс ViewModel, вы делаете что-то вроде:
try
{
myViewModel.insert();
}
catch (Exception e)
{
Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
Log.i("ErroCriarConta", "criaConta: " + e);
}
в вашей деятельности. Это позволяет действию перехватить ошибку, которую вы ранее выдавали в своем классе ViewModel в методе insert().
public class MyViewModel extends ViewModel
{
// ...
public void insert() throws Exception
{
db.execSQL(
"INSERT INTO " + TABLE_NAME +
" (" + COL2 + "," + COL3 + "," + COL4 + "," + COL5 + ")
VALUES('" + nome + "', '" + password + "', 0, 0); ");
}
}
Однако я бы пошел еще дальше и использовал шаблон проектирования хранилища, который просто добавляет еще один уровень абстракции между вашими данными и вашим пользовательским интерфейсом. Это позволит вам обернуть ваши операции с базой данных репозиторием, а затем вызвать эти методы-оболочки в вашей ViewModel для чтения / записи данных из / в вашу базу данных, в то время как ваша деятельность может получить доступ к данным, необходимым для пользовательского интерфейса, из ViewModel.
Теперь я знаю, что это звучит как большая работа для вас, чтобы ваш Toast отображался в правильном UI-контексте, но из опыта я могу сказать, что абстрагирование ваших данных действительно того стоит, особенно для предотвращения или исправления ошибок. как у вас, но и сделать изменение вашего приложения на более позднем этапе намного проще.