Не удается разрешить метод 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-контексте, но из опыта я могу сказать, что абстрагирование ваших данных действительно того стоит, особенно для предотвращения или исправления ошибок. как у вас, но и сделать изменение вашего приложения на более позднем этапе намного проще.

Другие вопросы по тегам