Android Core API下载文件

时间:2015-03-04 15:28:12

标签: android dropbox

我首先尝试使用Dropbox Core API从Android应用中的Dropbox下载文件及其内容,但是当我执行以下代码时,应用程序会崩溃。

编辑:我使用了两个函数downloadDropboxFile和copy函数。问题是当我读取应该包含Dropbox文件数据的本地文件时,我得到空白数据。

这是我调用函数

的代码
 downloadDropboxFile("/userandpass.txt");

     if (mDBApi.getSession().isLinked())
     {
         InputStream instream = new FileInputStream(String.valueOf(getExternalCacheDir()) + "/userandpass.txt");
         InputStreamReader inputreader = new InputStreamReader(instream);
         BufferedReader buffreader = new BufferedReader(inputreader);
         mTestOutput.setText(buffreader.readLine());
     }

这是函数

 private boolean downloadDropboxFile(String fileSelected) {
        File dir = new File(String.valueOf(getExternalCacheDir()));
        if (!dir.exists())
            dir.mkdirs();
        try {
            File localFile = new File(dir + fileSelected);


            if (!localFile.exists()) {
                localFile.createNewFile();
                copy(fileSelected, localFile);

            } else {

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }



    private void copy(final String dbPath, final File localFile) {

        new Thread(new Runnable() {

            @Override
            public void run() {
                BufferedInputStream br = null;
                BufferedOutputStream bw = null;
                try {
                    DropboxAPI.DropboxInputStream fd = mDBApi.getFileStream(dbPath,null);

                    br = new BufferedInputStream(fd);
                    bw = new BufferedOutputStream(new FileOutputStream(localFile));

                    byte[] buffer = new byte[4096];
                    int read;
                    while (true) {
                        read = br.read(buffer);
                        if (read <= 0) {
                            break;
                        }
                        bw.write(buffer, 0, read);
                    }


                } catch (DropboxException e) {
                    e.printStackTrace();
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (bw != null) {
                        try {
                            bw.close();
                            if (br != null) {
                                br.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                }
            }
        }). start();

    }

Android Studio上的Dropbox核心API实施:

在app / libs上我有:

保管箱-Android的SDK-1.6.3.jar httpmime - 4.0.3.jar json_simple-1.1.jar

1 个答案:

答案 0 :(得分:0)

您的问题在这里:

if (!localFile.exists()) {
            localFile.createNewFile(); //otherwise dropbox client will fail silently
}

例外是:

  

java.io.IOException:open failed:EROFS(只读文件系统)

这意味着您正在尝试在手机内存中只读取的位置创建文件,我猜测内部存储空间。根据可以写入的位置,查看this excellent answer by Mark Murphy创建文件。

希望这有一些帮助,快乐的编码; - )