【问题标题】:Android ProgressDialog in AsyncTaskAsyncTask 中的 Android ProgressDialog
【发布时间】:2014-12-18 13:01:47
【问题描述】:

我无法让 ProgressDialog 在 AsyncTask 中运行:

private class Upload extends AsyncTask<String, Void, Void> {
ProgressDialog pd;

    protected void onPreExecute() {
        super.onPreExecute();
            pd = new ProgressDialog(Activity.this);
            pd.setMessage("Message");
            pd.setIndeterminate(false);
            pd.setMax(100);
            pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pd.setCancelable(false);
            pd.show();
        }

       @Override
        protected Void doInBackground(String... params) {

                .......

                 public void write(byte[] bts, int st, int end) throws IOException {
                            totalSent += end;
                            progress = (int) ((totalSent / (float) contentLength) * 100);
                            publishProgress("Loaded "+progress+"%");
                            out.write(bts, st, end);
                        } 

                 .......

                }

            protected void onProgressUpdate(String... progress) {
            Log.d("ANDRO_ASYNC", progress[0]);
            pd.setProgress(Integer.parseInt(progress[0]));
        }


    protected void onPostExecute(Void result) {
                  super.onPostExecute(result);
          if (pd != null)
          {
             pd.dismiss();
          } 
              }

进度对话框有效,但没有任何进展。但是在我看到的日志中,这个进度是正确的。 所以,没有进行中的问题。

对于上面的代码,我收到一个错误,说“AsyncTask String,Void,Void 类型中的方法 publishProgress(Void...) 不适用于参数 (String)”。

无论我做什么,它都不起作用。我想,我错过了什么。请帮忙)

【问题讨论】:

    标签: android android-asynctask progressdialog


    【解决方案1】:

    onProgressUpdate 的参数在 AsyncTask 的第二个泛型类型中被定义。

    改变这个:

    private class Upload extends AsyncTask<String, Void, Void>
    

    到这里:

    private class Upload extends AsyncTask<String, Integer, Void>
    

    并更新此方法:

    protected void onProgressUpdate(Integer... progress)
    {
        Log.d("ANDRO_ASYNC", "Loaded " + progress[0] + "%");
        pd.setProgress(progress[0]);
    }
    

    你可以阅读更多关于AsynTask

    【讨论】:

    • 我试过了,没用。但结合上面的 ToYonos 回复,它可以工作。不幸的是我不能接受两个回复)Tks)
    【解决方案2】:

    您正在尝试对包含"Loaded "+progress+"%" 的字符串执行parseInt。它行不通。试试这个:

    publishProgress(""+progress);
    
    // [...]
    
    protected void onProgressUpdate(String... progress)
    {
        Log.d("ANDRO_ASYNC", "Loaded " + progress[0] + "%");
        pd.setProgress(Integer.parseInt(progress[0]));
    }
    

    【讨论】:

    • 这个加号 - 私有类 Upload 扩展了 AsyncTask ,正如 DevrimTuncer 下面建议的那样,使它工作。谢谢大家)
    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多