0

asynctask を使用して Web サービスからデータを取得します。ただし、スレッドの実行時に progessdialog が表示されない

private class Task_Bank extends AsyncTask<Void, Void, ArrayList<String>>{
        @Override
        protected ArrayList<String> doInBackground(Void... params) {
            ArrayList<String> arrayBankL = new ArrayList<String>();
            String url="http://qhoang.org/webservices/get_list_bank.php";
            JSONParser jsonParser = new JSONParser();
            JSONObject jsonObject = jsonParser.getJSONFromURL(url);
            int i = 0;
            try{
                JSONArray array_bank = jsonObject.getJSONArray("list_bank");
                for(i=0;i<array_bank.length();i++){
                    JSONObject node = array_bank.getJSONObject(i);
                    JSONObject c = node.getJSONObject("node_list_bank");
                    String namebank = c.getString("tennganhang");
                    arrayBankL.add(namebank);
                }
            }catch(JSONException e){
                e.printStackTrace();
            }
            return arrayBankL;
        }

        @Override
        protected void onPostExecute(ArrayList<String> result) {
            ArrayAdapter<String> arrayAdapter_bank = new ArrayAdapter<String>(TaskAActivity.this,android.R.layout.simple_spinner_item,result);
            arrayAdapter_bank.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spn_bank.setAdapter(arrayAdapter_bank);
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            ProgressDialog MyDialog = ProgressDialog.show( TaskAActivity.this, " " , " Loading. Please wait ... ", true);
        }   
}

OnCreate()

Task_Bank a = new Task_Bank();
a.execute();

JSONParser は、Web サービスの結果からパーサー JSON を使用するためのクラス i コードです。

4

2 に答える 2

3

show()タスクの開始前にダイアログを開始する必要がonPreExecute()あり、これに適した場所です。のonProgressUpdate進行状況のみをインクリメントする必要がありますProgressDialog。タスクが終了したとき、onPostExecute()呼び出し中MyDialog.dismiss()

@Override
protected void onPreExecute() {
   progressDialog.show();           
}

こんな感じかも

ProgressDialog MyDialog = ProgressDialog.show(TaskAActivity.this, " " , " Loading. Please wait ... ", true);
// some settings
Task_Bank a = new Task_Bank();
a.execute();

@Override
   protected void onPreExecute() {
      MyDialog.show();          
}
于 2012-06-09T15:02:54.940 に答える
1

進行状況ダイアログを表示するには、コードにいくつかの変更を加える必要があります。

onPreExcecute で ProgressDialog の表示を開始します。

onPostExcecute で進行状況ダイアログの表示を停止します。

@Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(context);
        dialog.setTitle("Hello");
        dialog.setMessage("Please Wait!!!");
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.show();
    }


@Override
    protected void onPostExecute(Object result) {
        dialog.dismiss();
                ---------
}
于 2012-06-09T15:07:46.910 に答える