2012-07-24 43 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