Java 在Android上加载数据时显示旋转轮对话框
当我的应用程序加载一些数据时,我想显示一个旋转的轮子对话框: 单击按钮时应显示“旋转轮子”对话框。我正在使用下面的代码,但它现在确实显示了旋转的轮子。有什么问题吗Java 在Android上加载数据时显示旋转轮对话框,java,android,dialog,loading,progress,Java,Android,Dialog,Loading,Progress,当我的应用程序加载一些数据时,我想显示一个旋转的轮子对话框: 单击按钮时应显示“旋转轮子”对话框。我正在使用下面的代码,但它现在确实显示了旋转的轮子。有什么问题吗 public void CheckAccount(String username, String password) { try { final ProgressDialog progDailog = ProgressDialog.show(this, "Progress_bar o
public void CheckAccount(String username, String password) {
try {
final ProgressDialog progDailog = ProgressDialog.show(this,
"Progress_bar or give anything you want",
"Give message like ....please wait....", true);
new Thread() {
public void run() {
try {
// sleep the thread, whatever time you want.
sleep(1000);
} catch (Exception e) {
}
progDailog.dismiss();
}
}.start();
//getting data code here
//getting data code here
//getting data code here
//getting data code here
//getting data code here
} catch (Exception e) {
Log.e(LOG_TAG, e.getMessage());
PopIt("CheckAccountError", e.getMessage(), "Denied");
}
}
因此,鉴于这个答案获得越来越多的赞成票,我决定我自己来提高答案的质量。当我看到原文时,我没有看到“我的代码中有什么问题?”这个问题的真正“答案”。我在下面保留了原始答案,以保留链接,我认为这是导致答案流行的原因 更新的答案 很可能您违反了“单线程模型”。Android UI工具包不是线程安全的,只能从“主”UI线程进行操作。Android有一些有用的方法可以用来确保UI操作在UI线程上完成。这些方法调用的大部分细节可以在Android无痛线程博客帖子中找到(链接在下面的“一”字中,供快速参考) 查看您的代码,我看到的具体冲突是在UI线程中创建了一个
ProgressDialog
,然后在新创建的后台线程中取消该线程
您最好将您的后台方法封装在一个Runnable
中,并使用它在后台完成工作
请记住,有很多方法可以进行后台处理,因此请查看可用的方法,并使用适合您的情况的方法
原始答案
试着了解一下在这方面该怎么做
另外,这里还有一些类似的StackOverflow问题
创建。
展示。
解雇。
我遇到了在两个活动(活动A和活动B)之间切换的问题。活动B有正在更新UI的长时间运行的任务,因此它不是AsyncTask的候选任务。我通过在完成第一个活动之前启动活动a和活动B的进度对话框解决了这个问题。代码如下所示:
// wrap thread around original code for progress button
final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Working", "Please Wait",
true, false);
ringProgressDialog.setIndeterminate(true);
new Thread(new Runnable() {
public void run() {
try {
Intent startNewActivityOpen = new Intent(getActivity(), ActivityB.class);
startNewActivityOpen.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
startActivity(startNewActivityOpen);
GlobalVars.navigateFromScreen = true;
Thread.sleep(3000);
if (ringProgressDialog != null && ringProgressDialog.isShowing()) {
ringProgressDialog.dismiss();
}
getActivity().finish();
} catch (Exception e) {
}
}
}).start();
喜欢引用,+1:)工作起来很有魅力。但是,一旦加载数据,如何停止它?隐藏对话框调用
dialog.disease()
ProgressDialog已弃用,可能会在Android的未来迭代中删除
dialog.show();
dialog.dismiss();
// wrap thread around original code for progress button
final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Working", "Please Wait",
true, false);
ringProgressDialog.setIndeterminate(true);
new Thread(new Runnable() {
public void run() {
try {
Intent startNewActivityOpen = new Intent(getActivity(), ActivityB.class);
startNewActivityOpen.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
startActivity(startNewActivityOpen);
GlobalVars.navigateFromScreen = true;
Thread.sleep(3000);
if (ringProgressDialog != null && ringProgressDialog.isShowing()) {
ringProgressDialog.dismiss();
}
getActivity().finish();
} catch (Exception e) {
}
}
}).start();