程序栏在android中未使用AsyncTask显示

程序栏在android中未使用AsyncTask显示,android,android-asynctask,android-progressbar,Android,Android Asynctask,Android Progressbar,我刚刚写了一段代码,当我和服务器交互时需要显示进度条。但若我在下面的代码中调用disclease方法,它就不起作用了 public class AsyncClass extends AsyncTask<String, String, String> { String result; public ProgressDialog progressbar; static Context context; public AsyncClass(Contex

我刚刚写了一段代码,当我和服务器交互时需要显示进度条。但若我在下面的代码中调用disclease方法,它就不起作用了

public class AsyncClass extends AsyncTask<String, String, String> {
    String result;
    public ProgressDialog progressbar;
    static Context context; 


    public AsyncClass(Context context,String result) {
        this.context = context;
        this.result = result;
    }

    @Override
    protected String doInBackground(String... params) {
        try {
            HttpClient httpclient = new DefaultHttpClient();
            URI u = new URI(params[0]);
            // url = Urls.SENDMOVIE_REQUEST_URL;
            HttpGet HG = new HttpGet(u);
            HttpResponse response = httpclient.execute(HG);
            //httpEntity = httpResponse.getEntity();
            result = EntityUtils.toString(response.getEntity());
            Log.d("result", result);
        } catch(Exception e) {
            e.printStackTrace();
        }

        return result;  
    }

    @Override
    protected void onPreExecute() {
        progressbar = new ProgressDialog(context);
        progressbar.setCancelable(true);
        progressbar.setMessage("loading....");
        progressbar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressbar.setProgress(0);

        progressbar.show();
    }

    @Override
    protected void onPostExecute(String result) {
        progressbar.dismiss(); 
    }
}
公共类AsyncClass扩展了AsyncTask{
字符串结果;
公共进度条;
静态语境;
公共异步类(上下文、字符串结果){
this.context=上下文;
this.result=结果;
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
URI u=新的URI(参数[0]);
//url=url.SENDMOVIE\u REQUEST\u url;
HttpGet HG=新的HttpGet(u);
HttpResponse response=httpclient.execute(HG);
//httpEntity=httpResponse.getEntity();
结果=EntityUtils.toString(response.getEntity());
Log.d(“结果”,结果);
}捕获(例外e){
e、 printStackTrace();
}
返回结果;
}
@凌驾
受保护的void onPreExecute(){
progressbar=新建ProgressDialog(上下文);
progressbar.setCancelable(真);
progressbar.setMessage(“加载…”);
progressbar.setProgressStyle(ProgressDialog.STYLE_微调器);
progressbar.setProgress(0);
progressbar.show();
}
@凌驾
受保护的void onPostExecute(字符串结果){
progressbar.disclose();
}
}

我认为它没有显示是因为
progressbar.setProgress(0)

把它取下来试试

如果您想要更新,您需要这样做:

private class DownloadTask extends AsyncTask<String, String, String> {

    @Override 
    protected void onPreExecute() { 
        super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... urls) {
        //Copy you logic to calculate progress and call 
        publishProgress("" + progress); 
    } 

    protected void onProgressUpdate(String... progress) {        
    mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    } 

    @Override 
    protected void onPostExecute(String result) {           
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
    } 
} 
私有类下载任务扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
} 
@凌驾
受保护的字符串doInBackground(字符串…URL){
//复制您的逻辑以计算进度并调用
出版进度(“+”进度);
} 
受保护的void onProgressUpdate(字符串…进度){
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
} 
@凌驾
受保护的void onPostExecute(字符串结果){
dismissDialog(对话框下载进度);
} 
} 
编辑了伊克巴尔的答案

 private class ProgressTask extends AsyncTask<String, Void, Boolean> {
        private ProgressDialog dialog;

        public ProgressTask(){ 
           dialog = new ProgressDialog(HomeActivity.this);
           dialog.setCancelable(false);
        } 

        /** progress dialog to show user that the backup is processing. */  
        /** application context. */ 
          @Override 
         protected void onPreExecute() {  
               this.dialog.setMessage("Please wait"); 
                this.dialog.show(); 
          } 

          protected Boolean doInBackground(final String... args) {
                  /** * Write your code */  
           } 

          @Override 
           protected void onPostExecute(final Boolean success) { 
                if (dialog.isShowing()) { 
                      dialog.dismiss(); 
                }  
                if (success) { 
                    // display UI 
                 } 
           } 
     } 
私有类ProgressTask扩展了AsyncTask{
私人对话;
公共进程任务(){
dialog=新建ProgressDialog(HomeActivity.this);
对话框。可设置可取消(false);
} 
/**“进度”对话框,向用户显示备份正在处理。*/
/**应用程序上下文。*/
@凌驾
受保护的void onPreExecute(){
this.dialog.setMessage(“请稍候”);
this.dialog.show();
} 
受保护的布尔doInBackground(最终字符串…args){
/***编写代码*/
} 
@凌驾
受保护的void onPostExecute(最终布尔值成功){
如果(dialog.isShowing()){
dialog.dismise();
}  
如果(成功){
//显示用户界面
} 
} 
} 

使用下面的代码,它将为您完成工作

private class ProgressTask extends AsyncTask<String, Void, Boolean> {
    private ProgressDialog dialog = new ProgressDialog(HomeActivity.this);
    /** progress dialog to show user that the backup is processing. */ 
    /** application context. */
      @Override
     protected void onPreExecute() { 
           this.dialog.setMessage("Please wait"); 
            this.dialog.show(); 
      }

      protected Boolean doInBackground(final String... args) {
              /** * Write your code */ 
       }

      @Override
       protected void onPostExecute(final Boolean success) { 
            if (dialog.isShowing()) { 
                  dialog.dismiss(); 
            } 
            if (success) { 
                // display UI
             }
       }
 }

并将其从Interecine()中移除。

检查progressbar的声明。您不需要全局初始化对象吗?您是否尝试在onProgressUpdate()中进行初始化?@Iqbal它在他的AsyncTask中是全局的。如何启动AsyncTask?尝试删除此行:progressbar.setProgress(0);然后在asyncTask的构造函数中声明progress对话框,并将上下文从活动传递给asyncTask。那么问题可能在于调用asyncTask。你是怎么做到的?你调试了吗?执行流程是如何进行的。它合适吗?不。如果我在post中不使用DISCLISE,则执行它时会正常工作,但在一段时间后不会使用DISCLISE OK。。检查我的答案中的编辑,希望这将帮助你。
public AsyncClass(Context context,String result) {
        this.context = context;
        this.result = result;
        progressbar = new ProgressDialog(context);
}