0

所以我有这个下载东西的类......我正在根据这个人的例子实现 NotificationHelper

private class DatabaseStorageTask extends AsyncTask<String, Integer, String> {

    protected String doInBackground(String... params) {

        for(int i=0; i<10; i++){
            //codes here

            downloadFileCount++;
            publishProgress( (int) ((downloadFileCount/totalDownloadFileCount) * 100 ) );
        }
    }

    protected void onProgressUpdate(Integer... progress){
        Log.e("progressupdate", "in progressupdate");
        mNotificationHelper.progressUpdate(progress[0]);
    }

}

这是代码中发生的事情的要点。我看不到是什么导致了我的问题,因为通知一直显示 0%,即使我对 downloadFileCount 和 totalDownloadFileCount 进行了 Log.e() 打印,我已经检查过它是准确的。

我错过了什么导致百分比进度不更新吗?

编辑:好的,所以我已经将 Log.e() 放在任何地方,我有点想通了这个问题,但不确定解决方案。百分比和计算一切正常,并且给出了正确的数字。但是,当调用 publishProgress 时,不会调用 onProgressUpdate。我根本没有看到 Log.e("progressupdate", "in progressupdate") 显示。

4

2 回答 2

0

The answer lies in using float rather than int values to get the percentage.

E.g. 5 of 20 = 25%

5/20 = 0.25

when using int = 0 int * 100 = 0

when using float = 0.25 float * 100 = 25

于 2013-02-22T12:25:04.220 回答
0

也许它在什么时候起作用

    protected String doInBackground(String... params) {

    while(downloadFileCount<100){ //try while instead of for-loop


        downloadFileCount++;
        publishProgress(downloadFileCount); //only count downloadFileCount
    }
}

不知道这是否是解决方案,这只是一个想法....

于 2013-02-22T12:19:08.127 回答