无法解析方法 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 中,但根据经验我可以说抽象你的数据确实是值得这样做,尤其是为了防止或修复像您这样的错误,同时也让以后修改您的应用程序变得容易得多。
我在 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 中,但根据经验我可以说抽象你的数据确实是值得这样做,尤其是为了防止或修复像您这样的错误,同时也让以后修改您的应用程序变得容易得多。