Android中AsyncTask的进度更新

时间:2016-03-22 07:31:57

标签: android android-asynctask

我是android新手。我正在尝试使用asyncTask。我知道有一些叫做onProgressUpdate的东西。

我从在线服务器下载数据,总数据大约是2000。

在后台Async中我在for循环中做了以下内容我继续发布I的值,如下所示:

@Override
protected String doInBackground(JSONArray... params)
{
  for (int i = 0; i < params[0].length(); i++)
  {
     //I DO MY BACKGROUND PROCESS

     publishProgress(i);                   
  }
return null;

}

protected void onProgressUpdate(Integer... values) {
            Log.e("Value", "onProgressUpdate - " + values[0]);
        }

这实际上是逐个打印计数直到2000年。现在我将如何显示计数百分比。像1%,2%到100%。

由于

2 个答案:

答案 0 :(得分:0)

试试这个:

使用double值而不是Integer

protected void onProgressUpdate(Double... values) {
double percentage = (values[0]/2000)*100;
            Log.e("Value", "onProgressUpdate - " + percentage+"%");
}

答案 1 :(得分:0)

公式在评论中说明,但动态计算更安全,而不是硬编码到2000.

AsyncTask<JSONArray, Integer, String> task = new AsyncTask<JSONArray, Integer, String>() {
            private int maxProgress;

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

                maxProgress = params[0].length();
                for (int i = 0; i < maxProgress; i++) {
                    //I DO MY BACKGROUND PROCESS

                    publishProgress(i);
                }

                return null;
            }

            @Override
            protected void onProgressUpdate(Integer... values) {
                Log.e("Value", "onProgressUpdate - " + (values[0] * 100 / maxProgress) + "%");
            }
        };