ProgressDialog崩溃的应用程序

时间:2012-07-24 22:57:20

标签: android listview progressdialog

我正在尝试让ProgressDialog在显示之前加载我的listview但是我遇到了崩溃。有没有更好的方法来实现这个?

编辑:更新了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); 

}

1 个答案:

答案 0 :(得分:1)

乍一看没有logcat,这就是问题所在:p.dismiss();

您正试图解除UI元素,在您的情况下是后台线程中的进度对话框。

虽然我确定这是原因,但您应该发布logcat以获取更多详细信息。

编辑:虽然在创建对话框时出现错误,但仍应考虑上述错误:MainActivity.this这无法实例化。您可以尝试按this传递实际上下文,而不是类上下文MainActivity.this

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

更新:也许在你的代码行中工作但你必须知道当你试图从后台线程访问UI元素时会导致内存泄漏(你甚至都没有尝试通过{{1}访问它根据我的观点,这是严肃的)。

我没有说你根本不应该添加它,但你应该在ui线程中添加它。对于我们现在的问题,runOnUIThread()工作了吗?因为我没有看到任何新的logcat或者什么...:)