在我的应用程序中,我试图从服务器获取数据并存储在数据库中。 当它正在进行所有这些工作时我想要进行progressdialog应该显示,如果成功获取数据,那么对话框应该关闭,并且一些alertDialog应该显示msg“成功获取数据”。如果那里有任何n / w问题,那么它应该显示不同的msg“n / w问题”。
我正在做的事情如下,
public void onClick(View arg0) {
myProgressDialog = ProgressDialog.show(
getParent(), "Please wait...",
"Doing upgrade...", true);
new Thread() {
public void run() {
try {
upgradeAll();//function where data fetched from server
sleep(5000);
} catch (Exception e) {
}
// Dismiss the Dialog
myProgressDialog.dismiss();
Toast.makeText(UpgradeAllTableData.this, "Due to some internal problem \n" +
"it couldnot update..", Toast.LENGTH_LONG).show();
}
}.start();
}
AsyncTask代码,
private class UpgradeTask extends AsyncTask<Context, Void, Void> {
private ProgressDialog Dialog = new ProgressDialog(UpgradeAllTableData.this);
@Override
protected void onPreExecute() {
System.out.println("In onPreExecute ");
Dialog.setTitle("Loading");
Dialog.setMessage("Please wait for few seconds...");
Dialog.show();
}
@Override
protected Void doInBackground(Context... params) {
System.out.println("In doInBackground ");
upgradeAll();
System.out.println("In doInBackground after fetching");
return null;
}
@Override
protected void onPostExecute(Void unused) {
System.out.println("In onPostExecute ");
Dialog.dismiss();
Toast.makeText(UpgradeAllTableData.this, "Problem with internet" , Toast.LENGTH_SHORT).show();
alertboxNeutral("Warning", "Problem with Internet Connection", "Okay","Try again");
}
}
问题是Toast没有显示。为什么呢?
我的问题是哪个条件以及在哪里给出,以便如果有任何问题n / w然后它显示一些msg和成功然后显示另一个消息。
我应该为此编写代码? 给我一些建议。
谢谢
答案 0 :(得分:1)
不完全是您特定问题的答案,但您是否考虑过AsyncTask?它几乎被设计用于处理像你这样的情况,其中任务执行异步,同时在UI线程上显示一些进度(和最终结果)。或者,您可以广播一个意图并让您的活动捕获它以显示吐司,因为您的Toast也应该从您的UI线程中显示。
更新: AsyncTask参考 - http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:1)
你在做什么是完全错误的。 UI线程处理所有UI更改,但是在这里你在UI线程中创建ProgressDialog并在其他一些线程中解除它。解决方案是使用AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html