Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 某些计算,如异步任务中的百分比不起作用_Java_Android_Android Asynctask_Calculation - Fatal编程技术网

Java 某些计算,如异步任务中的百分比不起作用

Java 某些计算,如异步任务中的百分比不起作用,java,android,android-asynctask,calculation,Java,Android,Android Asynctask,Calculation,在尝试了这么多之后,我终于完成了我的异步任务,并在进程中更新ui。这里的主要目标是将api调用中的一些数据添加到我的数据库中。我的百分比计算有问题,因为在我的进度条中,我已将max设置为100,因此我需要使百分比正常工作 class AddtoDBTask extends AsyncTask<List<RecordModel>, Integer, String> { @Override protected String doInBackgr

在尝试了这么多之后,我终于完成了我的异步任务,并在进程中更新ui。这里的主要目标是将api调用中的一些数据添加到我的数据库中。我的百分比计算有问题,因为在我的进度条中,我已将max设置为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
        }
    }
class AddtoDBTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(列表…列表){
列表记录=列表[0];
对于(int count=0;count

除百分比部分外,此代码的其余部分正常工作。

在您的代码中,我看不到在哪里声明了
recordcount
,以及为其分配了什么值。如果它是一个整数,那么我假设由于整数除法的缘故,
currentRecord/recordcount
将始终是
0

更改:

因此,您可以这样计算正确的百分比:

int progress = (int)((1.0 * currentRecord / values[1]) * 100);

我相信您错过了对
super.onProgressUpdate(值)的调用
应该是这样的

@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
    }

(currentRecord/recordcount)*100
让我相信
currentRecord/recordcount
会给出一个介于0和1之间的值。但由于您有
整数
,它将四舍五入为0<代码>0*100
=
0%
。您可以通过在计算中添加一个
double
值(如
1.0*currentRecord/recordcount
)轻松更改此值,这将得到一个
double
结果。提到“默认版本不做任何事情”,所以调用super方法不需要这样做。
int progress = (int)((1.0 * currentRecord / values[1]) * 100);
@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
    }