我测试下面的代码并没有出现Toast消息而且“TestMethod”没有调用“Catch”方法,请帮帮我?
public void TestMethod()
{
Test= new Thread(new Runnable() {
public void run() {
try{
Catch();
}
catch (Exception ioe)
{
}
}
});
Test.start();
}
public void Catch()
{
Test2= new Thread(new Runnable() {
public void run() {
try{
Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show();
}
catch (Exception ioe)
{
}
}
});
Test2.start();
}
答案 0 :(得分:6)
可能runOnUiThread对您有所帮助。
试试这个:
runOnUiThread(new Runnable()
{
public void run()
{
Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show();
}
});
答案 1 :(得分:5)
您应该在UI线程上调用Toast.makeText
。请阅读this了解详情。
答案 2 :(得分:4)
您只能从UI主题进行干杯。如果您有权访问该活动,则可以更改您的代码,例如
public void TestMethod()
{
Test= new Thread(new Runnable() {
public void run() {
try{
Catch();
}
catch (Exception ioe)
{
}
}
});
Test.start();
}
public void Catch()
{
activity.runOnUiThread(new Runnable() {
public void run() {
try{
Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show();
}
catch (Exception ioe)
{
}
}
});
}
答案 3 :(得分:3)
这是完整的解决方案,应该可以完美运行 有些方法只能在uithread上运行,(runOnUiThread是活动的一个方法,所以如果你不能达到它,那么只需要放一个变量
private final Activity activity = this;
并从那里调用runOnUiThread
public void TestMethod() {
Test= new Thread(new Runnable() {
public void run() {
try{
Catch();
}
catch (Exception ioe) {
//always log your exceptions
Log.e("simpleclassname", ioe.getMessage(), ioe);
}
}
});
Test.start();
}
public void Catch() {
Test2= new Thread(new Runnable() {
public void run() {
try{
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show();
});
catch (Exception ioe) {
//always log your exceptions
Log.e("simpleclassname", ioe.getMessage(), ioe);
}
}
});
Test2.start();
}
答案 4 :(得分:2)
您正在使用的主题不允许toast显示。您必须在UI线程上执行与UI相关的内容。如果您不在主线程上,那么您需要使用runOnUiThread。