无法解析方法 makeText()

Cannot resolve method makeText()

我在 try/catch 下的 android 项目的 DatabaseHelper class 上尝试敬酒时遇到问题。 我试过以下方法:

Toast.makeText(this, "", Toast.LENGTH_SHORT).show();

Toast.makeText(DatabaseHelper.this, "", Toast.LENGTH_SHORT).show();

Toast.makeText(DatabaseHelper.this.getApplicationContext(), "", Toast.LENGTH_SHORT).show();

其中 none 个有效。

这是我用来做吐司的代码

    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();
}

提前感谢任何愿意提供帮助的人。

正如用户 Mike M. 在他的评论中提到的,您不应该将与用户界面相关的内容与您的数据管理混在一起。 相反,我建议您查看 ViewModel 设计模式。使用 ViewModel class 你可以做类似的事情:

try
{
    myViewModel.insert();
}
catch (Exception e)
{
    Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
    Log.i("ErroCriarConta", "criaConta: " + e);
}

在你的 Activity 中。这让 activity 捕获您之前在 ViewModel class 中在 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); ");
    }
}

不过,我会更进一步,使用存储库设计模式,它只是在您的数据和 UI 之间添加另一个抽象层。这将允许您让存储库包装您的数据库操作,然后在您的 ViewModel 中调用这些包装器方法来 read/write 数据 from/to 您的数据库,而您的 activity 可以访问数据需要来自 ViewModel 的 UI。

现在我知道这听起来像是你要做的很多工作,只是让你的 Toast 显示在正确的 UI-context 中,但根据经验我可以说抽象你的数据确实是值得这样做,尤其是为了防止或修复像您这样的错误,同时也让以后修改您的应用程序变得容易得多。