android在一個執行緒Thread中不能彈出alertdialog的解決辦法(網路檔案不能訪問導致程式強行退出)
阿新 • • 發佈:2021-02-11
在讀取網路檔案時,有時候因為網路檔案不能被訪問導致出現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(); } }); }