Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 进度条不会被取消_Android_Android Asynctask_Progress Bar - Fatal编程技术网

Android 进度条不会被取消

Android 进度条不会被取消,android,android-asynctask,progress-bar,Android,Android Asynctask,Progress Bar,我无法在我的Android应用程序中关闭进度条。 我声明了一个objectbar对象,得到一个调用doInProgress函数的字符串,并将一个名为v1的对象传递给它。 当异步任务完成其任务时,为什么出现的进度条不会像onPostExecute方法中声明的那样被取消 在我的活动中,我称之为: ProgressDialog pDialog; response = new GetString(SecondActivity.this).execute(v1).get(); 这是myAsync任务:

我无法在我的Android应用程序中关闭进度条。 我声明了一个objectbar对象,得到一个调用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();
        }
    }
建议??
提前感谢

我认为问题在于你开始工作的方式

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

如果您是从UI线程调用它,它将使它在那里阻塞。删除.get部分,使线程可以继续运行并正确执行onPreExecute和onPostExecute函数。

chck post execute,我怀疑它是否有效


尝试将onPostExecute更改为OnPostExecuteTring resp

在onPostExecute方法中执行System.out以检查控件是否在此方法中到达。如果onPost被执行,并且对话框没有关闭,则在UI thread-context.runOnUiThread中关闭对话框,如果仍然不起作用,则使ProgressDialog静态不是一个解决方案,只是一次尝试,希望它现在可以关闭。

我使用get通过GetString类获得字符串响应。我将尝试设置一个全局变量。可以是全局变量,也可以在onPostExecute中对该字符串执行所需操作。。。这仍然在UI线程上运行。我删除了get,但要获得进度对话框,我需要触摸屏幕。但我希望它被自动取消。您确定postExecute函数被执行了吗?logcat当时是否显示任何类型的警告?如果您按照其他答案设置Cancelable为true,这就是它会做的,按后退键或点击屏幕,您将能够摆脱进度条,但任务仍在后台进行。。。而且它并没有真正解决您的解雇调用不工作的问题…我认为您的异步任务不正常。而onPostExecute不被调用问题是:你们知道为什么onPostExecute不被调用吗?试着将onPostExecute更改为OnPostExecuteTringresp@FrankBr我面临着同样的问题你有什么解决办法吗下面是解决办法。