Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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_Progressdialog - Fatal编程技术网

Android 执行异步任务期间不显示进度对话框

Android 执行异步任务期间不显示进度对话框,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,我在谷歌上搜索了几个小时,尝试了堆栈溢出的所有答案,但没有解决我的问题 我制作了一个android程序来下载字节数据,效果非常好。和下载工作的后台线程。我想显示一个进度对话框(jus旋转对话框)。但我遇到了一个很烦人的问题。我的下载大约需要5秒,但我的进度对话框要么不显示,要么仅显示最后1秒 这是我的异步任务代码 public class ImageJSON extends AsyncTask<String, String, byte[]> { private JSONObject

我在谷歌上搜索了几个小时,尝试了堆栈溢出的所有答案,但没有解决我的问题

我制作了一个android程序来下载字节数据,效果非常好。和下载工作的后台线程。我想显示一个进度对话框(jus旋转对话框)。但我遇到了一个很烦人的问题。我的下载大约需要5秒,但我的进度对话框要么不显示,要么仅显示最后1秒

这是我的异步任务代码

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