首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从dropbox下载文件时未调用onProgressUpdate()

从dropbox下载文件时未调用onProgressUpdate()
EN

Stack Overflow用户
提问于 2012-09-25 18:22:01
回答 3查看 2.1K关注 0票数 3

我最近两天一直在吃东西..在我的例子中,没有调用onProgressUpdate() ..因此,它不会更新进度条。有没有人可以看一看,提个建议谢谢。以下是我的代码

代码语言:javascript
复制
package com.example.downloadupload;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
import com.dropbox.client2.DropboxAPI;
import com.dropbox.client2.ProgressListener;
import com.dropbox.client2.android.AndroidAuthSession;
import com.dropbox.client2.exception.DropboxException;

public class DownloadFile extends AsyncTask<Void, Long, Boolean> {

    DropboxAPI<AndroidAuthSession> dDBApi;
    Context dContext;
    private final  ProgressDialog uDialog;
    private long dFileLen;
    long bytess;

    public DownloadFile(Context context,
        DropboxAPI<AndroidAuthSession> mDBApi) {
        dDBApi=mDBApi;
        dContext=context.getApplicationContext();
        uDialog = new ProgressDialog(context);
        uDialog.setMax(100);
        uDialog.setMessage("Downloading Image");
        uDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        uDialog.show();
    }

@Override
protected Boolean doInBackground(Void... params) {

    String path1= Environment.getExternalStorageDirectory()+"/log.txt";
    BufferedOutputStream out=null;
    try {
        File file = new File(path1);
        out = new BufferedOutputStream(new FileOutputStream(file));
        dDBApi.getFile("/log.txt", null,out,new ProgressListener() {

          /* @Override
           public long progressInterval() {
               // Update the progress bar every half-second or so
               return 500;
           }*/

            @Override
            public void onProgress(long bytes, long total) {
                // TODO Auto-generated method stub
                bytess=bytes;
                publishProgress(bytes);
            }
        });
    } catch (DropboxException e) {
        Log.e("DbExampleLog", "Something went wrong while downloading.");
    } catch (FileNotFoundException e) {
        Log.e("DbExampleLog", "File not found.");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {}
        }
    }
    return null;
}

@Override
protected void onProgressUpdate(Long... progress) {
    // TODO Auto-generated method stub
    super.onProgressUpdate(progress);
    int percent = (int)(100.0*(double)progress[0]/bytess + 0.5);
    uDialog.setProgress(percent);
    System.out.println("Hi progressing");
}

@Override
protected void onPostExecute(Boolean result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);

    uDialog.dismiss();
    System.out.println("calling post execute");
}


}
EN

回答 3

Stack Overflow用户

发布于 2013-08-06 13:49:55

而不是这个

代码语言:javascript
复制
int percent = (int)(100.0*(double)progress[0]/bytess + 0.5);

使用这个

代码语言:javascript
复制
int percent = (int)(100.0*(double)progress[0]/TotalsizeOfFile  + 0.5);

你可以取消注释

代码语言:javascript
复制
       @Override

       public long progressInterval() 

       {

           // Update the progress bar every half-second or so

           return 500;

       }

这对我很有效。

票数 3
EN

Stack Overflow用户

发布于 2012-09-25 18:32:34

我认为错误是这样的

代码语言:javascript
复制
bytess=bytes;
publishProgress(bytes);    

然后,

代码语言:javascript
复制
int percent = (int)(100.0*(double)progress[0]/bytess + 0.5); 

这里,-> = bytess,因此进度可能不会更新。

票数 0
EN

Stack Overflow用户

发布于 2012-09-25 18:46:06

让onProgress()如下所示

代码语言:javascript
复制
public void onProgress(long bytes, long total) {
// TODO Auto-generated method stub
    long[2] bytess = {bytes, total};
    publishProgress(bytess);
 }

并计算百分比

代码语言:javascript
复制
int percent = (int)(100.0*(double)progress[0]/progress[1]+ 0.5); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12580958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档