1. 程式人生 > 其它 >android在一個執行緒Thread中不能彈出alertdialog的解決辦法(網路檔案不能訪問導致程式強行退出)

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();
        }
    });
}