Android 执行异步任务期间不显示进度对话框
我在谷歌上搜索了几个小时,尝试了堆栈溢出的所有答案,但没有解决我的问题 我制作了一个android程序来下载字节数据,效果非常好。和下载工作的后台线程。我想显示一个进度对话框(jus旋转对话框)。但我遇到了一个很烦人的问题。我的下载大约需要5秒,但我的进度对话框要么不显示,要么仅显示最后1秒 这是我的异步任务代码Android 执行异步任务期间不显示进度对话框,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,我在谷歌上搜索了几个小时,尝试了堆栈溢出的所有答案,但没有解决我的问题 我制作了一个android程序来下载字节数据,效果非常好。和下载工作的后台线程。我想显示一个进度对话框(jus旋转对话框)。但我遇到了一个很烦人的问题。我的下载大约需要5秒,但我的进度对话框要么不显示,要么仅显示最后1秒 这是我的异步任务代码 public class ImageJSON extends AsyncTask<String, String, byte[]> { private JSONObject
public class ImageJSON extends AsyncTask<String, String, byte[]> {
private JSONObject jsonObject = new JSONObject();
private byte[] response;
private ProgressDialog pg;
private Context context;
public ImageJSON(Activity activity) {
pg = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pg.setMessage("Downloading, please wait.");
pg.show();
}
@Override
protected void onProgressUpdate(String... progress) {
super.onProgressUpdate(progress);
if (pg != null) {
pg.setProgress(Integer.parseInt(progress[0]));
}
}
protected void onPostExecute(byte[] result) {
if (pg.isShowing()) {
pg.dismiss();
}
}
@Override
protected byte[] doInBackground(String... params) {
HttpPost httpPost = new HttpPost("my file url....");
HttpClient httpClient = new DefaultHttpClient();
HttpContext httpContext = new BasicHttpContext();
try {
jsonObject.put("imageId", params[0]);
StringEntity stringEntity = new StringEntity(jsonObject.toString());
httpPost.addHeader("Content_Type", "application/octet_stream");
httpPost.setEntity(stringEntity);
HttpResponse httpResponse = httpClient.execute(httpPost, httpContext);
HttpEntity entity = httpResponse.getEntity();
if (entity!=null) {
response = EntityUtils.toByteArray(entity);
entity.consumeContent();
httpClient.getConnectionManager().shutdown();
}
} catch (JSONException|IOException e) {
e.printStackTrace();
}
return response;
}
如果有人能帮助我,请提前谢谢。试试这个-
public ImageJSON(Activity activity) {
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(ReaderActivity.this);
pg.setMessage("Downloading, please wait.");
pg.show();
}
试试这个-
public ImageJSON(Activity activity) {
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(ReaderActivity.this);
pg.setMessage("Downloading, please wait.");
pg.show();
}
试试这个-
public ImageJSON(Activity activity) {
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(ReaderActivity.this);
pg.setMessage("Downloading, please wait.");
pg.show();
}
试试这个-
public ImageJSON(Activity activity) {
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(ReaderActivity.this);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您不想使用
get()
,因为它仍然会冻结您的UI线程,从而否认使用AsyncTask
的意义。您可能需要实现onPostExecute
,以便正确返回结果 您不想使用get()
,因为它仍然会冻结您的UI线程,从而否认使用AsyncTask
的意义。您可能需要实现onPostExecute
,以便正确返回结果 您不想使用get()
,因为它仍然会冻结您的UI线程,从而否认使用AsyncTask
的意义。您可能需要实现onPostExecute
,以便正确返回结果 您不想使用get()
,因为它仍然会冻结您的UI线程,从而否认使用AsyncTask
的意义。您可能需要实现onPostExecute
,以便正确返回结果 您忘了在onPreExecute方法中初始化progressDialogue
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(pass_context_here);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您忘记在onPreExecute方法中初始化progressDialogue
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(pass_context_here);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您忘记在onPreExecute方法中初始化progressDialogue
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(pass_context_here);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您忘记在onPreExecute方法中初始化progressDialogue
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(pass_context_here);
pg.setMessage("Downloading, please wait.");
pg.show();
}
改变这个
public ImageJSON(Context ctx) {
this.context = ctx;
}
现在在您的onPreExecute()
方法中使用
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(context);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您正在初始化ImageJSON
类中的ProgressDialog
,阻止UI线程意味着冻结它。因此需要在onPreExecute()
方法中使用上下文对其进行初始化。更改此选项
public ImageJSON(Context ctx) {
this.context = ctx;
}
现在在您的onPreExecute()
方法中使用
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(context);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您正在初始化ImageJSON
类中的ProgressDialog
,阻止UI线程意味着冻结它。因此需要在onPreExecute()
方法中使用上下文对其进行初始化。更改此选项
public ImageJSON(Context ctx) {
this.context = ctx;
}
现在在您的onPreExecute()
方法中使用
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(context);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您正在初始化ImageJSON
类中的ProgressDialog
,阻止UI线程意味着冻结它。因此需要在onPreExecute()
方法中使用上下文对其进行初始化。更改此选项
public ImageJSON(Context ctx) {
this.context = ctx;
}
现在在您的onPreExecute()
方法中使用
@Override
protected void onPreExecute() {
super.onPreExecute();
pg = new ProgressDialog(context);
pg.setMessage("Downloading, please wait.");
pg.show();
}
您正在初始化
ImageJSON
类中的ProgressDialog
,阻止UI线程意味着冻结它。因此,需要在引用上下文的onPreExecute()
方法中对其进行初始化。只需尝试在我们对progressupdate方法进行注释时是否出现进度对话框?不要调用execute().get();它将阻止UI取消对ProgressUpdate的注释没有帮助,但是删除get()方法会起到作用…thnx。请尝试在我们对ProgressUpdate方法进行注释时是否显示进度对话框?不要调用execute().get();它将阻止UI取消对ProgressUpdate的注释没有帮助,但是删除get()方法会起到作用…thnx。请尝试在我们对ProgressUpdate方法进行注释时是否显示进度对话框?不要调用execute().get();它将阻止UI取消对ProgressUpdate的注释没有帮助,但是删除get()方法会起到作用…thnx。请尝试在我们对ProgressUpdate方法进行注释时是否显示进度对话框?不要调用execute().get();它将阻止UI取消对onProgressUpdate的注释没有帮助,但是删除get()方法可以实现这一点……thnx.Activity是一个上下文,因此没有区别。另外,onPreExecute()
是在UI线程上运行的,所以这也没有什么不同。我知道这是一样的。根据OPs的问题,这将是我的答案。活动是一个上下文,所以没有区别。另外,onPreExecute()
是在UI线程上运行的,所以这也没有什么不同。我知道这是一样的。根据OPs的问题,这将是我的答案。活动是一个上下文,所以没有区别。另外,onPreExecute()
是在UI线程上运行的,所以这也没有什么不同。我知道这是一样的。根据OPs的问题,这将是我的答案。活动是一个上下文,所以没有区别。另外,onPreExecute()
是在UI线程上运行的,所以这也没有什么不同。我知道这是一样的。根据OPs的问题,这将是我的答案。我知道了。。。get()正在冻结UI线程…使用onPostExecute比使用jsonObj.getString()更好地处理结果…thnxI得到了它。。。get()正在冻结UI线程…使用onPostExecute比使用jsonObj.getString()更好地处理结果…thnxI得到了它。。。get()正在冻结UI线程…使用onPostExecute比使用jsonObj.getString()更好地处理结果…thnxI得到了它。。。get()正在冻结UI线程…使用onPostExecute比使用jsonObj.getString()更好地处理结果…thnx