尝试在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();
}
在此先感谢您愿意提供帮助的人。
答案 0 :(得分:1)
正如用户Mike M.在其评论中提到的那样,您不应将与用户界面相关的内容与数据管理混在一起。 相反,我建议您看一下ViewModel设计模式。使用ViewModel类,您可以执行以下操作:
try
{
myViewModel.insert();
}
catch (Exception e)
{
Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
Log.i("ErroCriarConta", "criaConta: " + e);
}
在您的活动中。这样,活动就可以捕获您先前在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中调用那些包装方法,以从数据库中读取数据/向数据库写入数据,而您的活动可以从ViewModel中访问UI所需的数据。
现在,我知道要做很多工作,只是要在正确的UI上下文中显示Toast,但是根据经验,我可以说抽象数据确实是值得的,尤其是对于防止或修复像您这样的错误,也使以后修改应用程序变得更加容易。