AsyncTask中的进度更新,Android
我是android新手。我正在尝试使用asyncTask。我知道有一种叫做onProgressUpdate的东西 我正在从在线服务器下载数据,总数据约为2000 在Background Async中,我在for循环中执行了以下操作,我一直在发布I的值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++) {
@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) + "%");
}
};