0

私は小さな問題を抱えていて、それを行う方法がわかりません。xml Web サービスを介して情報を取得するアプリを作成しました。データは解析され、ローカルの sqlite データベースに挿入されます。これまでのところすべてが機能します。データのサイズ (取得された情報によって異なります) のため、アクションが実行されたことをユーザーに通知するために、プログレスバーとスピナーを含む読み込み画面を挿入するつもりでした。このように機能する予定です。

私の問題は、作業が完了するとすぐに表示されることです。これが私がやった方法です:

Handler phHandle = new Handler(){
        @Override
        public void handleMessage(Message msg){
            int progress = msg.arg1;
            pb.setProgress(progress);
        }
    };
    class firstInitHandler implements Runnable{
          private Handler phHandle;
          public void setHandle(Handler h){
              this.phHandle = h;
          }
          public void run(){
                try {
                    firstInit i = new firstInit();
                    i.doInit(this.phHandle);
                    if(i.isResult())
                    i.doParse();
                    if(i.isData()){
                        i.doTasks();
                        i.doEquipment();
                        i.doUser();
                        i.doCompany();
                        i.doForms();
                        i.doSysconfig();
                    }
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
          }
    }
    firstInitHandler h = new firstInitHandler();
    h.setHandle(phHandle);
    h.run();

これはメソッドの一部です。まあ、これまでのところうまくいきます。情報を処理するためのスレッドは、SDK のタスク マネージャーに表示されます。デバッグ システムの動作中に作成される logcat のステータス メッセージも確認できます。ただし、画面は空白のままで、タスクが完了するとすぐに表示されます。少し混乱していて、待機画面を機能させるにはどこから始めればよいかわかりません。

どんな助けでも大歓迎です。

クリス

4

2 に答える 2

1

AsyncTask を使用して、これをスムーズに動作させることができます....

アクティビティ内で AsyncTask .... を定義します。

次に、この方法でonclickまたはonCreate内からAsyncTaskを呼び出すことができます

new loading().execute();

AsyncTask クラスは以下のようになります。

  • 基本的な概念は、onPerExecute() で進行状況ダイアログを初期化することです。
  • 解析などの重い作業 (非 UI ) を DoInBackground() で実行します。
  • 次に、onPostExecute() でダイアログを閉じます。

  • DoinBackGround で UI の変更を行うことはできませんが、OnPre / OnPostExecute() で行うことができます。

クラスは以下の通りです。

 private class loading extends AsyncTask'<'String, Integer, Boolean>

{

ProgressDialog dialog ;
                @Override
                protected void onPostExecute(Boolean result) {
                    // TODO Auto-generated method stub
                    super.onPostExecute(result);
                    if(result==true) 
                    {  

                     dialog.dismiss();

                    }

                }

                @Override
                protected void onPreExecute() {
                    // TODO Auto-generated method stub
                    super.onPreExecute();

                   dialog = new ProgressDialog(current.this);
                            dialog.setMessage("Loading...");
                            dialog.show();

                }

                @Override
                protected void onProgressUpdate(Integer... values) {
                    // TODO Auto-generated method stub
                    super.onProgressUpdate(values);
                }

                @Override
                protected Boolean doInBackground(String... params) {
                    // TODO Auto-generated method stub

                    try {
                        firstInit i = new firstInit();
                        i.doInit(this.phHandle);
                        if(i.isResult())
                        i.doParse();
                        if(i.isData()){
                            i.doTasks();
                            i.doEquipment();
                            i.doUser();
                            i.doCompany();
                            i.doForms();
                            i.doSysconfig();
                        }
                    } catch (NullPointerException e) 
                       {
                        e.printStackTrace();
                        return false;
                        }
                     return true;


                }



            }   
于 2012-05-11T12:06:02.137 に答える
0

Android Developers リソースを調べてみましたか?

ここダイアログのチュートリアルがあります。進行状況ダイアログの例はこのページに示されています。または、特定の進行状況ダイアログ セクションに移動して、すべての可能なコマンド、使用法などを表示することもできます。

これがあなたが必要とするものであることを願っています。

于 2012-05-09T12:01:58.467 に答える