android在一个线程Thread中不能弹出alertdialog的解决办法(网络文件不能访问导致程序强行退出)

在读取网络文件时,有时候因为网络文件不能被访问导致出现Exception,这时想弹出一个alertdialog,但是发现打开app后,app马上强制退出了。错误代码如下:

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            list=readExcel();
        } catch (IOException e) {
            AlertDialog.Builder dialog3 = new AlertDialog.Builder(MainActivity.this);
            dialog3.setTitle("错误:");
            dialog3.setMessage("错误文字");
            dialog3.setCancelable(false);
            dialog3.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            dialog3.create().show();
        }
    }
}).start();

想要弹出alertdialog,必须利用如下方式,先将上面的代码变为:

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            list=readExcel();
        } catch (IOException e) {
            e.printStackTrace();
            showTestDialog();
        }
    }
}).start();

再定义方法showTestDialog(),则可在不用强制退出app的情况下弹出alertdialog:

public void showTestDialog() {
    handler.post(new Runnable() {
        @Override
        public void run() {
            AlertDialog.Builder dialog3 = new AlertDialog.Builder(MainActivity.this);
            dialog3.setTitle("错误:");
            dialog3.setMessage("错误文字");
            dialog3.setCancelable(false);
            dialog3.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            dialog3.create().show();
        }
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值