在Android上加载数据时显示旋转轮对话框

我想显示一个旋转轮对话框,而我的应用程序加载一些数据:

转轮对话框

旋转轮对话框应该点击button显示。 我正在使用下面的代码,但它现在显示的是转轮。 可能是什么问题呢?

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"); } } 

  • 我想要一个进度圈而不是进度对话框
  • 如何更改ProgressBar颜色?
  • 所以,看到这个答案越来越多,我决定自己去提高答案的质量。 当我看到原文的时候,我没有看到“我的代码中有什么问题?”这个问题的真正答案。 我在下面保留原来的答案以保持链接,这正是我所假设的引起答案的stream行。

    更新的答案

    您很可能违反了“单线程模式”。 Android UI工具包不是线程安全的,只能从“主”UI线程操纵。 Android有一些有用的方法可以用来确保UI操作在UI线程上完成。 这些方法调用的大部分细节可以在Android Painless Threading博客文章中find(链接在下面的单词“one”中,以供快速参考)。

    看看你的代码,我看到的具体违规行为是ProgressDialog正在被创build的UI线程,然后在新创build的后台线程中被解散。

    你最好把你的背景方法封装在一个Runnable并使用View#post(Runnable)在后台执行这个工作。

    请记住,有很多方法可以做背景,所以请看看可用的内容,并使用适合您的情况的内容。

    原始答复

    看看如何在Android中进行asynchronous 工作的许多 教程之一。

    另外,这里还有一些类似的其他StackOverflow问题

    Android中的进度对话框问题

    进度对话框打开活动

    进度对话框,同时开始新的活动

    Android:进度对话框微调不旋转

    更新进度对话框

    android:显示进度对话框

     ProgressDialog dialog = new ProgressDialog(this); // this = YourActivity dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setMessage("Loading. Please wait..."); dialog.setIndeterminate(true); dialog.setCanceledOnTouchOutside(false); dialog.show(); 

    我有两个活动,活动A和活动B之间切换的问题。活动B有长期运行的任务更新用户界面,所以它不是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();