事实证明,当我想通过 Toast 显示消息并发送上下文时出现错误,我这样做:
public void mostrarMascotas(){
new Thread(new Runnable() {
@Override
public void run() {
try {
Connection con = new Conexion().getConexion();
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery("SELECT * FROM tbl_mascota");
String cadena = "";
while (rs.next()){
cadena += rs.getString("mascota_nombre")+"\n";
}
Toast.makeText(this, cadena, Toast.LENGTH_LONG).show();// Aqui me sale el error
}
catch (Exception exp) {
System.out.println("Error al conectarse con la BD: "+ exp.getMessage());
}
}
}).start();
}
在 Toast 中更改上下文时this
不再getApplicationContext()
向我抛出错误,但是当我运行应用程序并执行此方法时,应用程序将关闭....
奇怪的是,当我用Toask.makeText
System.out.println(string) 替换它时,它对我来说非常有效,它从数据库中获取了我需要的数据。
如果定义为上下文
this
来创建Toast
,问题是上下文将尝试成为线程本身,在这种情况下建议通过getApplicationContext()使用应用程序上下文。Activity
如果您有权访问,您还可以使用上下文:但使用getApplicationContext()更轻。
Toast
在执行 a 期间有几种显示 a 的方法Thread
,例如使用 aHandler
或使用runOnUiThread()
。举个例子:有了这个,
Toast
在执行Thread
.好的。
我认为您的解决方案是在 Ui 线程中运行 toast,如下所示:
根据runOnUiThread文档:
在西班牙语中 :
您的代码应如下所示: