0

DBに接続するAsynkTaskウィッチを作成し、結果をUIに入れました。これは完全に機能しますが、ダイアログなどを含めたいのですが、他のレイアウトウィッチはprogressBarを表示してからUIを更新します。

さて、レイアウトが変更され、最後に「testGUI」レイアウトになりましたが、AsynkTask データでアップグレードされません。これがコードです。どうもありがとう。

クラス DatabaseAsync は AsyncTask を拡張します {

    @Override
    protected void onPreExecute(){
        setContentView(R.layout.loading);
    }
    /**
     * Se ejecuta en el hilo secundario, en segundo plano
     */
    @Override
    protected JSONArray doInBackground(Void... params) {
        JSONArray jArray = new JSONArray();
        jArray = DatabaseController
                .rellenarArray("SomeURL");
        return jArray;
    }

    /**
     * Una vez terminado el hilo secundario se ejecuta esto
     */
    @Override
    protected void onPostExecute(JSONArray jArrayFull) {
        setContentView(R.layout.testgui);
         getQuestion(jArrayFull,1);
    }

}
4

2 に答える 2

2

2回使用することはできません setContentView()。各ビューへの参照を取得し、 でプロパティを変更して更新する必要がありますonPostExecute()

于 2012-04-15T21:45:58.363 に答える
0

プログレス バーを表示した後、UI はどのように表示されますか?

ロジックが次のような場合:

  1. UI で btn または sth を押して DB AsyncTask を開始します
  2. 頻繁に更新するプログレス バーを含むダイアログ アクティビティを開始します。
  3. DB タスクが機能し、進行状況バーでダイアログ アクティビティを更新します。
  4. DB タスクが完了すると、完了したことがダイアログ アクティビティに通知されます。
  5. ダイアログ アクティビティが 100% に達した、および/またはすべてが問題なく終了したことをユーザーに伝える
  6. ユーザーは、ダイアログ アクティビティで [OK] ボタンを押して、ユーザーが DB タスクの開始を初期化した UI アクティビティに戻ることができます。

...次に、ハンドラーを操作して、ダイアログ アクティビティを更新する必要があります。

ユーザーが手順 6 で [OK] を押すと、UI アクティビティが再開されます。そのため、UI アクティビティで表示したいものがすべて UI アクティビティで更新されるようにする必要がonResumeあります。

asynctask から UI への直接呼び出しは避ける必要があります。ハンドラーを使用して、バックグラウンド ワーカー タスクから UI に通信します。

その方法についてさらに情報が必要な場合は、ハンドラーと進行状況ダイアログを探してください。いくつかのチュートリアルがあります。

ハンドラーを使用せずにバックグラウンド ワーカー アクティビティから UI アクティビティ メソッドを直接呼び出すと、最悪の場合、UI がフリーズし、Android システムによって削除されることさえあります。

進行状況バーを頻繁に更新する必要がない場合は、次のように呼び出します。

textView.setText(result); in your onPostExecute method 

またはその他の UI 要素の直接設定

于 2012-04-15T21:57:51.670 に答える