1

Android アプリで進行状況バーを閉じることができません。オブジェクト bar オブジェクトを宣言し、doInProgress 関数を呼び出して文字列を取得し、それに v1 というオブジェクトを渡します。非同期タスクがタスクを終了すると、onPostExecute メソッドで宣言されているようにプログレス バー (表示されます) が閉じられないのはなぜですか?

私の活動では、次のように呼びます:

ProgressDialog pDialog;
response = new GetString(SecondActivity.this).execute(v1).get();

これは myAsync タスクです。

package com.gms;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;


public class GetString extends AsyncTask<VariablesTable, Void, String> {

        private Context context;

        public ProgressDialog pDialog;

        public GetString(Context c){
            context = c;
        }           

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(context);
            pDialog.setMessage("Loading..");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }


        protected void onPostExecute() {
            // dismiss the dialog once got all details
            if (pDialog.isShowing()){
                pDialog.dismiss();
            }
        }


        @Override
        protected String doInBackground(VariablesTable... obj) {
            // Making HTTP request
            InputStream is = null;

            try {
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    String paramString = URLEncodedUtils.format(obj[0].cat, "utf-8");
                    obj[0].url += "?" + paramString;
                    HttpGet httpGet = new HttpGet(obj[0].url);

                    HttpResponse httpResponse = httpClient.execute(httpGet);
                    HttpEntity httpEntity = httpResponse.getEntity();
                    is = httpEntity.getContent();          

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

                BufferedReader reader = null;
                try {
                    reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                StringBuilder sb = new StringBuilder();
                String line = null;
                try {
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return sb.toString();
        }
    }

提案?? 前もって感謝します

4

3 に答える 3

0

問題は、ASyncTask の開始方法にあると思います。

response = new GetString(SecondActivity.this).execute(v1).get();

UI スレッドから呼び出している場合は、そこでブロックされます。パーツを削除して、スレッドが実行を継続し、適切.get()に実行できるようにします。onPreExecuteonPostExecute

于 2012-09-21T08:01:43.410 に答える
0

チェックポスト実行、私はそれが動作するとは思わない

onPostExecute() を onPostExecute(String resp) に変更してみてください

于 2012-09-21T08:54:52.200 に答える
0

onPostExecute() メソッドで System.out を実行して、このメソッドでコントロールが到達しているかどうかを確認します。onPost が実行され、ダイアログが閉じない場合は、UI スレッド --- context.runOnUiThread でダイアログを閉じます。それでも機能しない場合は、ProgressDialog を静的にして (単なる解決策ではありません)、すぐに閉じられることを願っています。

于 2012-09-23T05:42:18.907 に答える