2011-05-28 43 views
31

加載數據我想說明一個紡輪對話,而我的應用程序加載一些數據:顯示紡車對話框,同時在Android

Spinning wheel dialog

紡車對話框應顯示在點擊一個按鈕。我正在使用下面的代碼,但它現在顯示了轉輪。可能是什麼問題呢?

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

回答

48

所以,看到這個答案越來越多,我決定應該自己去提高答案的質量。在我看原文時,我沒有看到「我的代碼中存在什麼問題?」的問題沒有真正的「答案」。我在下面保留原始答案以保持鏈接,這正是我所假設的引起答案流行的原因。

更新回答

很可能是你違反了「單線程模式」。 Android UI工具包不是線程安全的,只能從'主'UI線程中操作。 Android有一些有用的方法可以用來確保您的UI操作在UI線程上完成。這些方法調用的大部分細節可以在Android Painless Threading博客文章中找到(鏈接在下面的'one'一詞中,here可供快速參考)。

看着你的代碼,我看到的具體違規是ProgressDialog正在UI線程中創建,然後在新創建的後臺線程中被解散。

如果將背景方法封裝在Runnable中,並使用View#post(Runnable)在後臺執行工作,則會更好。

請記住,有很多方法可以做背景,所以看看可用的東西,並使用適合您的情況的東西。

原來的答案

在如何在Androidasynchronousworkmanytutorialsone乘坐look

而且,這裏有類似於一些其他StackOverflow的問題

Progress dialog problem in Android

Progress Dialog on open activity

Progress Dialog while starting new activity

Android: Progress Dialog spinner not spinning

Updating progress dialog

android: showing a progress dialog

+1

完美的引用,非常感謝@nicholas! :) – Kris 2011-05-28 05:37:42

+6

喜歡使用引用,+1 :) – xorinzor 2012-10-31 21:01:53

32
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(); 
+0

工作就像魅力。但是,一旦數據加載完成後如何停止它? – Sykox 2017-05-27 03:20:08

+0

隱藏對話框調用'dialog.dismiss();' – 2017-12-07 18:42:53

1

我有兩個活動,活動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();