2012-07-24 86 views
0

我試圖讓ProgressDialog在顯示它之前加載我的列表視圖,但我得到了崩潰。會有更好的方法來實現這個嗎?ProgressDialog崩潰應用程序

編輯:更新logcat錯誤,忘記它。

List<String> internetArray = new ArrayList<String>(); 
    private ProgressDialog p; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      ListView internetList = (ListView)findViewById(R.id.list); 

      p = ProgressDialog.show(this, "Please wait..", "Loading list..", true); 

      new Thread(){ 
       public void run(){ 
        //do some extreme work before creating list 

        try { 
         sleep(5000); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        internetArray.clear(); 
        //p.dismiss(); 
       } 


      }.start(); 

      getPermissions(this); 
      ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, internetArray); 

      arrayAdapter.sort(new Comparator<String>() {  
         public int compare(String object1, String object2) { 
          return object1.compareTo(object2); 
         }; 
        }); 

      internetList.setAdapter(arrayAdapter); 

} 
+0

發佈您的LogCat – Nerd 2012-07-24 22:58:24

+0

忘了它,只是張貼。 – dythe 2012-07-24 23:01:52

回答

1

從乍一看沒有logcat這是問題:p.dismiss();

您正試圖解僱一個UI元素,在您的情況下,從後臺線程進度對話框。

儘管我確信這是原因,但您應該發佈您的logcat以獲取更多詳細信息。

編輯:上面的錯誤應該考慮,雖然錯誤出現在創建對話框:MainActivity.this這不能instatiated。您可以嘗試傳遞this而不是上下文MainActivity.this的實際上下文。

p = ProgressDialog.show(this, "Please wait..", "Loading list..", true); 

更新:也許在你的代碼行工作,但你要知道,當你正試圖從一個後臺線程訪問UI元素會導致內存泄漏(你甚至沒有試圖通過訪問它runOnUIThread()方法,這是認真的根據我的意見)。

我沒有說你不應該添加它,但你應該添加它在UI線程。對於我們現在的問題,this工作?因爲我沒有看到任何新的logcat或東西... :)

+0

沒有p.dismiss();該對話框只是停留,我無法解僱它,無論什麼,即使在列表視圖加載後,並沒有在控制檯中的錯誤 – dythe 2012-07-24 23:15:06

+0

不,沒有任何錯誤或任何。 – dythe 2012-07-24 23:41:44

+0

那麼確認可能? – 10s 2012-07-24 23:42:36