Android 进度条不会被取消
我无法在我的Android应用程序中关闭进度条。 我声明了一个objectbar对象,得到一个调用doInProgress函数的字符串,并将一个名为v1的对象传递给它。 当异步任务完成其任务时,为什么出现的进度条不会像onPostExecute方法中声明的那样被取消 在我的活动中,我称之为: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任务:
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我面临着同样的问题你有什么解决办法吗下面是解决办法。