【问题标题】:Cannot resolve method makeText()无法解析方法 makeText()
【发布时间】:2018-11-21 18:46:29
【问题描述】:

我在尝试使用 try/catch 对我的 Android 项目上的 DatabaseHelper 类进行祝酒时遇到问题。 我尝试了以下方法:

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

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

【问题讨论】:

  • “它们都不起作用” - 你得到的确切错误是什么?
  • 如果DatabaseHelperSqliteOpenHelper,那么它不是Context,这是第一个参数所需要的。你将Context 传递给构造函数,你可以为它保留一个字段,但你真的不应该从数据库帮助类中做 UI 的东西。那应该在你的Activity
  • 克瑞斯。一切都是同样的错误。
  • 您不一定需要catch Activity 中的任何内容。修改您的 criaConta() 方法以返回成功/失败值,即使只是一个简单的 boolean
  • 那将是另一种解决方案,是的。希望我早点想到这一点。再次感谢您的帮助

标签: java android android-studio android-toast


【解决方案1】:

正如用户 Mike M. 在他的评论中提到的,您不应该将与用户界面相关的内容与您的数据管理混为一谈。 相反,我建议您查看 ViewModel 设计模式。使用 ViewModel 类,您可以执行以下操作:

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

在您的活动中。这可以让 Activity 捕获您之前在 insert() 方法中在 ViewModel 类中抛出的错误。

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 中调用这些包装器方法以从/向数据库读取/写入数据,而您的 Activity 可以从 ViewModel 访问 UI 所需的数据。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多