某些计算(例如我的异步任务中的百分比)不起作用
Some calculations like percentage in my async task not working
在尝试了这么多之后,我终于让我的异步任务开始工作并更新 ui 进度。这里的主要 objective 是将来自 api 调用的一些数据添加到我的数据库中。我的百分比计算工作有问题,因为我在进度条中将最大值设置为 100,因此我需要正确计算百分比。
class AddtoDBTask extends AsyncTask<List<RecordModel>, Integer, String> {
@Override
protected String doInBackground(List<RecordModel>... lists) {
List<RecordModel> records = lists[0];
for (int count = 0; count < records.size(); count ++) {
publishProgress(count);
RecordModel record = new RecordModel();
record.recordid = records.get(count).recordid;
record.name = records.get(count).name;
record.idnumber = records.get(count).idnumber;
record.gender = records.get(count).gender;
record.dobirth= records.get(count).dobirth;
SQLiteHelper.addRecord(record);
Log.d("Log: ", record.title + " added");
}
return "Task Completed.";
}
@Override
protected void onPostExecute(String result) {
syncProgress.setVisibility(View.GONE);
statusText.setText(String.format("Thanks for your patience, We are done syncing!"));
}
@Override
protected void onPreExecute() {
statusText.setText(String.format("Task 2 of 2 in progress..."));
}
@Override
protected void onProgressUpdate(Integer... values) {
int currentRecord = (values[0] + 1);
int progress = (currentRecord / recordcount) * 100;
syncPercentage.setText(progress + " %"); //not working
syncSize.setText(String.format("Record " + currentRecord + " of " + recordcount));
syncProgress.setProgress(progress); //not working
}
}
除百分比部分外,此代码的其余部分均有效。
在您的代码中,我看不到 recordcount
的声明位置以及分配给它的值。如果它是一个整数,那么我认为 currentRecord / recordcount
将永远是 0
因为整数除法。
变化:
publishProgress(count);
至
publishProgress(count, records.size());
所以你可以像这样计算正确的百分比:
int progress = (int)((1.0 * currentRecord / values[1]) * 100);
我相信你错过了 super.onProgressUpdate(values);
的电话
它应该是这样的
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
int currentRecord = (values[0] + 1);
int progress = (currentRecord / recordcount) * 100;
syncPercentage.setText(progress + " %"); //not working
syncSize.setText(String.format("Record " + currentRecord + " of " + recordcount));
syncProgress.setProgress(progress); //not working
}
在尝试了这么多之后,我终于让我的异步任务开始工作并更新 ui 进度。这里的主要 objective 是将来自 api 调用的一些数据添加到我的数据库中。我的百分比计算工作有问题,因为我在进度条中将最大值设置为 100,因此我需要正确计算百分比。
class AddtoDBTask extends AsyncTask<List<RecordModel>, Integer, String> {
@Override
protected String doInBackground(List<RecordModel>... lists) {
List<RecordModel> records = lists[0];
for (int count = 0; count < records.size(); count ++) {
publishProgress(count);
RecordModel record = new RecordModel();
record.recordid = records.get(count).recordid;
record.name = records.get(count).name;
record.idnumber = records.get(count).idnumber;
record.gender = records.get(count).gender;
record.dobirth= records.get(count).dobirth;
SQLiteHelper.addRecord(record);
Log.d("Log: ", record.title + " added");
}
return "Task Completed.";
}
@Override
protected void onPostExecute(String result) {
syncProgress.setVisibility(View.GONE);
statusText.setText(String.format("Thanks for your patience, We are done syncing!"));
}
@Override
protected void onPreExecute() {
statusText.setText(String.format("Task 2 of 2 in progress..."));
}
@Override
protected void onProgressUpdate(Integer... values) {
int currentRecord = (values[0] + 1);
int progress = (currentRecord / recordcount) * 100;
syncPercentage.setText(progress + " %"); //not working
syncSize.setText(String.format("Record " + currentRecord + " of " + recordcount));
syncProgress.setProgress(progress); //not working
}
}
除百分比部分外,此代码的其余部分均有效。
在您的代码中,我看不到 recordcount
的声明位置以及分配给它的值。如果它是一个整数,那么我认为 currentRecord / recordcount
将永远是 0
因为整数除法。
变化:
publishProgress(count);
至
publishProgress(count, records.size());
所以你可以像这样计算正确的百分比:
int progress = (int)((1.0 * currentRecord / values[1]) * 100);
我相信你错过了 super.onProgressUpdate(values);
的电话
它应该是这样的
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
int currentRecord = (values[0] + 1);
int progress = (currentRecord / recordcount) * 100;
syncPercentage.setText(progress + " %"); //not working
syncSize.setText(String.format("Record " + currentRecord + " of " + recordcount));
syncProgress.setProgress(progress); //not working
}