1

バックグラウンドからデータを取得するための AsyncTask クラスを 1 つ作成しました (データベースへのアクセス)。

onPreExecute ()メソッドで、進行状況ダイアログを 1 つ作成します

        try {
            progressDialog = ProgressDialog.show(context, "",
                    "Please wait...", true);
            progressDialog.setIndeterminate(true);

        } catch (final Throwable th) {
            // TODO
        }

そして onpostExecute() で

        protected void onPostExecute(Boolean result) {

            pinPoint();
            progressDialog.dismiss();
        }

私の更新されたクラス、

@Override
        protected Boolean doInBackground(Void... params) {
            clust = getPinPointClusters();
            runOnUiThread(new Runnable() {
                public void run() {
                    plotClusters(clust);
                }
            });

            return true;
        }

        @Override
        protected void onPostExecute(Boolean result) {

            progressDialog.dismiss();
        }

ここで pinpoint() メソッドはサーバーからデータを取得し、マップ内のポイントを固定します。しかし、ProgressDialogのprogressBarはアニメーション化されていません...最善の方法を教えてください...

ありがとう

4

3 に答える 3

2

pinPoint() メソッドを に配置し、UI に影響を与えるメソッドdoInBackground methodpinPoint ()の行をこのメソッドの下に保持することをお勧めします::

activityname.runOnUiThread(new Runnable() {
    @Override
        public void run() 
         {
        // Put here the line which is changing the UI.          
     }
});  

例 : doInBackground で UI を変更しようとする行がある場合は、次のようにします。

 protected Boolean doInBackground(final String... args) 
   {
     .
     .
     .
     .     
    activityname.runOnUiThread(new Runnable() {
            @Override
                public void run() 
                 {
                   eg. linearLayout.addView(ChildView);         
             }
        });
     .
     .
     . 
   }

ここで、onPostExecute ()メソッドProgressDialogから を閉じる必要があります。

于 2012-07-24T09:30:41.180 に答える
1

「アニメーション」はメイン UI スレッドで発生します。onPostExecuteUIスレッドでも実行されるため、サーバーへの呼び出しを行うときに効果的にブロックされます。バックグラウンド スレッドで実行されるように移動pinPointdoInBackground、進行状況ダイアログのアニメーションを維持できるようにします。

Android の新しいバージョン (Honeycomb [Android 3.0] 以降) でコードを実行すると、strict モードのときにNetworkOnMainThreadExceptionもスローされます。

pinPointUI の変更が必要な場合は、ネットワーク呼び出しをdoInBackground(+ データ操作) に分離し、UI のみを に変更する必要がありますonPostExecute。タスクでデータへの参照を保持するか、結果として渡すことができます。

publishProgressメソッドを使用して、 中に複数の UI 変更を公開することもできますdoInBackground

于 2012-07-24T09:27:23.247 に答える
0

データをフェッチしてUI部分を更新するためのさまざまな関数を作成しました

    private class FetchRSSFeeds extends AsyncTask<String, Void, Boolean> {

    private ProgressDialog dialog = new ProgressDialog(HomeActivity.this);

    protected void onPreExecute() {
        this.dialog.setMessage("Please wait");
        this.dialog.show();
    }

    protected Boolean doInBackground(final String... args) {
        try {
            Utilities.arrayRSS = objRSSFeed.FetchRSSFeeds(Constants.Feed_URL);
            return true;
        } catch (Exception e) {
            Log.e("tag", "error", e);
            return false;
        }
    }

    @Override
    protected void onPostExecute(final Boolean success) {

        if (dialog.isShowing()) {
            dialog.dismiss();
        }

        if (success) {
            // Setting data to list adaptar
            setListData();
            txtTitle.setText(Utilities.RSSTitle);
        }
    }
}
于 2012-07-24T09:23:30.660 に答える