我首先尝试使用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
答案 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创建文件。
希望这有一些帮助,快乐的编码; - )