Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法解析方法makeText()_Java_Android_Android Studio_Android Toast - Fatal编程技术网

Java 无法解析方法makeText()

Java 无法解析方法makeText(),java,android,android-studio,android-toast,Java,Android,Android Studio,Android Toast,当我试图在try/catch下为我的android项目上的DatabaseHelper类干杯时,我遇到了一个问题。 我尝试了以下方法: Toast.makeText(this, "", Toast.LENGTH_SHORT).show(); Toast.makeText(DatabaseHelper.this, "", Toast.LENGTH_SHORT).show(); Toast.makeText(DatabaseHelper.this.getApplicationContext(),

当我试图在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();
}

提前感谢所有愿意提供帮助的人。

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

try
{
    myViewModel.insert();
}
catch (Exception e)
{
    Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
    Log.i("ErroCriarConta", "criaConta: " + e);
}
在你的活动中。这使活动能够捕获您以前在insert()方法的ViewModel类中抛出的错误

不过,我会更进一步,使用repository设计模式,它只是在数据和UI之间添加了另一个抽象层。这将允许您将数据库操作包装到存储库中,然后在ViewModel中调用这些包装方法从数据库中读取/写入数据,而您的活动可以从ViewModel访问UI所需的数据


现在我知道这听起来是你要做的很多工作,只是让你的吐司显示在正确的UI环境中,但从经验来看,我可以说,提取你的数据确实是值得的,特别是对于防止或修复像你这样的错误,而且还可以使以后修改你的应用程序变得更容易。

“没有一个是有效的”-您得到的确切错误是什么?如果
DatabaseHelper
SqliteOpenHelper
,则它不是
上下文,这是第一个参数所需要的。将
上下文
传递到构造函数中,可以为其保留一个字段,但实际上不应该从数据库助手类中执行UI操作。这应该在您的
活动中。这与所有错误都是一样的。您不必在
活动中捕获任何内容。修改
criaConta()
方法以返回成功/失败值,即使只是一个简单的
布尔值。但愿我早一点想到这件事。再次感谢你的帮助
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); ");
    }
}