在我的应用程序中,我试图从服务器获取数据并存储在数据库中。当它正在做所有这些工作时,我想在那个时候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有任何问题,那么它会显示一些消息,然后成功显示另一个消息。
我应该在哪里写代码?给我一些建议。
谢谢
不完全回答您的特定问题,但您考虑过AsyncTask吗?它的设计主要是为了处理像您这样的情况,其中任务是异步执行的,同时在UI线程上显示一些进度(和最终结果)。或者,你可以广播一个意图,让你的activity捕捉它来显示toast,因为你的toast也应该从你的UI线程显示。
更新:AsyncTask参考- http://developer.android.com/reference/android/os/AsyncTask.html
你这样做是完全错误的。UI线程处理所有UI更改,但这里你在UI线程中创建ProgressDialog并在其他线程中取消它。一个解决方案是使用AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html