我Activity里开启了一个线程,用它来弹出一个对框,可是弹不出来,这是怎么回事?而且Toast也是没有用的。
代码如下:
new Thread()
{
@Override
public void run()
{
Looper.prepare();
try
{
if (!Utility.CheckNetWorkStatus(NewVersionActivity.this))
{
Toast.makeText(NewVersionActivity.this,
"网络连接断开,请检查网络连接", 1000).show();
return;
}
URL url;
url = new URL(mUrl);
URLConnection conn = url.openConnection();
Log.i("upgrade", "open connection to get file size!");
conn.setRequestProperty("Charset", "UTF-8");
fileSize = (long) conn.getContentLength();
AlertDialog.Builder dialog = new AlertDialog.Builder(NewVersionActivity.this);
dialog.setTitle(R.string.tips);
dialog.setMessage(R.string.getsrcwrong);
dialog.setPositiveButton(R.string.ok,new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
}
});
dialog.show();
} catch (Exception e)
{
e.printStackTrace();
Log.e("Exception", e.toString()+" "+fileSize);
}
super.run();
}
}.start();

解决方案 »

  1.   

    AlertDialog,TOAST 要放在主线程里面才可以
      

  2.   

    AlertDialog Toast放在主线程里面才可以。
      

  3.   

    要添加Looper.loop();
    你没有添加这个循环,当然显示不了了
      

  4.   

    在非UI线程里面不要操作UI,可以在UI线程里弹出,比如handler 发送个Message,或者runOnUiThread...
      

  5.   

    谁规定不可以在非UI线程中,不能操作UI了?那是不能操作Activity的UI.
    任何线程都可以作为一个UI thread,不然,那么系统的toast是在哪里弹出的?系统service中怎么弹出ANR的dialog?
      

  6.   

    你的代码中没有吧,我把你的代码,放在我的工程中测试过了,添加loop,是可以出现的
      

  7.   

    有的,就在run()的开头,难道放的位置有要求?
      

  8.   

    一道运行到looper.loop();就开始while循环,就不执行下面的代码了,放在最后
      

  9.   

    我试了可以的,谢谢啦。原来要把弹出对话框的部分用looper.prepare()和looper.loop()包夹着。