我对Android有点新意并陷入困境,我不知道如何处理它。
以下是我要做的事情:
来自Activity我在后台完成任务时启动一些任务并显示Progress-Dialog。 如果任务成功完成,请关闭活动并启动新活动。
但是如果在后台我遇到异常,我想回到活动并关闭Progress-Dialog并显示Toast,可能发生了一些异常。
来自活动:
@Override
public void onCreate(Bundle savedInstanceState)
{
// my code
// start Progress Dialog
showProgressDialog();
}
public void showProgressDialog()
{
PD = new ProgressDialog(getActivity());
PD.setMessage("Downloading.....");
PD.show();
}
@Override
public void onDestroy()
{
super.onDestroy();
if (PD != null)
{
PD.dismiss();
PD = null;
}
}
并在后台:
try
{
// perform some db tasks
// using AsyncTask
}
catch (Exception e)
{
if(e.getErrorCode() == 34)
{
// From here I want go back to Activity and close the Progress dialog
// and shows what error has occurred.
}
}
因此,如果发生异常,我想回到活动并关闭那个进度对话框,还是有其他方法可以做到这一点?
答案 0 :(得分:2)
我知道ProgressDialog在你的UI线程中,你不能在后台线程中访问它。为什么不使用AsyncTask?它易于使用,您可以更轻松地处理它。示例:
class TestAsync extends AsyncTask<Void, Void, Void> {
private ProgressDialog mDialog;
private Boolean error = false;
@Override
protected void onPreExecute() {
mDialog = new ProgressDialog(TestActivity.this);
mDialog.setCancelable(false);
mDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
// whatever you would like to do in background
} catch (Exception e) {
error = true;
}
return null;
}
protected void onPostExecute(Void... arg0) {
mDialog.dismiss();
if (error) {
Toast.makeText(getApplicationContext(),
R.string.error, Toast.LENGTH_SHORT).show();
return;
} else {
// whatever you would like to do after background
}
}
}
答案 1 :(得分:1)
假设AsyncTask
是您声明ProgressDialog的Activity的内部类,您可以简单地返回,并在UI线程上运行的onPostExecute中删除它:
假设你的asynctask返回一个String
catch (Exception e)
{
if(e.getErrorCode() == 34)
{
// From here I want go back to Activity and close the Progress dialog
// and shows what error has occurred.
return "34"
}
}
public void onPostExecute(String result) {
// dismiss
// show result
}
答案 2 :(得分:0)
如果任务花费很长时间,则不应在UI踏板上运行它。您应该使用异步任务。
此外,您应该始终检查对话框引用是否仍然存在。
if(dialog!=null && dialog.isShowing())
dialog.dismiss();
确保异步任务在同一个类上运行,否则使用具有弱引用的侦听器来发布任务的响应。