0

リストビューを表示する前に 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); 

}
4

1 に答える 1

1

一見すると logcat がなければ、これが問題です: p.dismiss();.

UI 要素を閉じようとしています。あなたの場合は、バックグラウンド スレッドからの進行状況ダイアログです。

これが原因だと確信していますが、詳細については logcat を投稿してください。

編集: ダイアログの作成時にエラーが表示されますが、上記のエラーを考慮する必要があります:MainActivity.thisこれは開始できません。thisクラス context ではなく、実際のコンテキストを渡すことができますMainActivity.this

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

更新: おそらくあなたのコード行は機能していますが、バックグラウンド スレッドから UI 要素にアクセスしようとするとメモリ リークが発生することを知っておく必要があります (メソッドを介してアクセスしようとしてもいないためrunOnUIThread()、これは深刻です私の意見)。

まったく追加してはいけないとは言いませんでしたが、UI スレッドに追加する必要があります。今の問題に、うまくいきましたthisか?新しい logcat か何かが表示されないため... :)

于 2012-07-24T23:02:12.740 に答える