AsyncTask中的进度更新,Android

AsyncTask中的进度更新,Android,android,android-asynctask,Android,Android Asynctask,我是android新手。我正在尝试使用asyncTask。我知道有一种叫做onProgressUpdate的东西 我正在从在线服务器下载数据,总数据约为2000 在Background Async中,我在for循环中执行了以下操作,我一直在发布I的值 @Override protected String doInBackground(JSONArray... params) { for (int i = 0; i < params[0].length(); i++) {

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

我正在从在线服务器下载数据,总数据约为2000

在Background 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;
这实际上是一个接一个的打印,直到2000年。现在,我将如何显示计数的百分比。比如1%,2%到100%

谢谢

试试这个:

使用双精度值代替整数

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

注释中说明了该公式,但动态计算比硬编码到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) + "%");
            }
        };
AsyncTask task=new AsyncTask(){
私人发展;
@凌驾
受保护字符串doInBackground(JSONArray…参数){
maxProgress=params[0]。长度();
对于(int i=0;i
Log.e(“值”、“onProgressUpdate-”+((值[0]/2000)*100)+“%”)@KhizarHayat。。这将显示2000%对不起,我以前更新过:PNow Check对不起,公式在希望之前是错误的,现在它可以工作了。处理完每个项目后,您可能不需要发布进度。如果您有200个项目,它将导致向UI线程发送2000个通知,而您需要处理20个项目以更改百分比。这意味着如果要缩短值,计算是正确的,您可以使用Math.floor Methods:)确定。让我知道,检查一下。谢谢
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) + "%");
            }
        };