取消Dropbox getFile下载

时间:2012-10-04 14:29:06

标签: android dropbox-api

使用Android Dropbox SDK时,是否有人知道在getFile调用启动后取消下载的最佳方法。目前,我的AsyncTask类执行以下操作:

@Override
protected O2ShellFileManagerError doInBackground(File... params) {
    if (params[0] == null) {
        return new O2ShellFileManagerError(
                "No File found.",
                O2ShellErrorCode._o2sfm_ec_unknown);
    }

    File mFile = params[0];

    try {
        DropboxAPI<AndroidAuthSession> mDBApi = O2DropboxStorage
                .getDropboxSession(mContext);

        // mOutputStream is class level field.
        mOutputStream = new FileOutputStream(mFile);
        DropboxFileInfo info = mDBApi.getFile(mDropboxPath, null,
                mOutputStream, new ProgressListener() {

                    @Override
                    public void onProgress(long bytes, long total) {
                        if (!isCancelled())
                            publishProgress(bytes, total);
                        else {
                            if (mOutputStream != null) {
                                try {
                                    mOutputStream.close();
                                } catch (IOException e) {
                                }
                            }
                        }
                    }
                });
    } catch (DropboxException e) {
        Log.e("DbExampleLog",
                "Something went wrong while getting file.");

    } catch (FileNotFoundException e) {
        Log.e("DbExampleLog", "File not found.");

    } finally {
        if (mOutputStream != null) {
            try {
                mOutputStream.close();
                mOutputStream = null;
            } catch (IOException e) {
            }
        }
    }
    /*
     * The task succeeded
     */
    return null;
}

所以我上面的解决方法基本上关闭了生成DropboxException的OnProgess方法中的mOutputStream。有比这更好/更清洁的方式吗?

1 个答案:

答案 0 :(得分:1)

使用getFileStream API获取DropboxInputStream。

public DropboxAPI.DropboxInputStream getFileStream(java.lang.String path, java.lang.String rev)

当用户取消下载时,请调用DropboxInputStream的close函数。

我认为这种方法可以完全释放资源。