Платформа доступа к хранилищу Android — ParcelFileDescriptor — создает файл 0B при записи файлаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Платформа доступа к хранилищу Android — ParcelFileDescriptor — создает файл 0B при записи файла

Сообщение Anonymous »

В настоящее время я пытаюсь загрузить определенный каталог с моего сервера Linux на
мой телефон Android через sftp.
Пока что мой код работал нормально.
Однако как только я создал свое приложение как подписанный APK и установил его, приведенный ниже код не работает должным образом.
Он не загружает файл с моего сервера Linux, но создает файлы размером 0B.

Код: Выделить всё

private void recursiveFolderDownload(String src, DocumentFile pickedDir) throws SftpException, InterruptedException {
Vector fileAndFolderList = channelSftp.ls(src);
for (ChannelSftp.LsEntry item : fileAndFolderList) {
if (!item.getAttrs().isDir()) {
DocumentFile newFile = pickedDir.findFile(item.getFilename());
if(newFile==null){
MainActivity.changeLoadingMessage("Fetching "+item.getFilename());
restoreStatus = "Fetching "+item.getFilename();
newFile = pickedDir.createFile("",item.getFilename());
restoringFiles.add(getPathFromUri(newFile.getUri()));
write(src + "/" + item.getFilename(),newFile.getUri());
}
else{
MainActivity.changeLoadingMessage("Skipping "+item.getFilename());
restoreStatus = "Skipping "+item.getFilename();
}
} else if (!(".".equals(item.getFilename()) || "..".equals(item.getFilename()))) {
DocumentFile newDir = pickedDir.findFile(item.getFilename());
if(newDir==null){
newDir = pickedDir.createDirectory(item.getFilename());
}
recursiveFolderDownload(src + "/" + item.getFilename(), newDir);
}
}
}

private void write(String src, Uri uri) throws InterruptedException {
try {
ParcelFileDescriptor descriptor = context.getContentResolver().openFileDescriptor(uri,"w");
if(descriptor!=null) {
FileOutputStream fos=new FileOutputStream(descriptor.getFileDescriptor());
channelSftp.get(src,fos);
fos.close();
}
} catch (IOException | SftpException e) {
e.printStackTrace();
}
}
Конечно, я реализовал Storage Access Framework, используя активность с Intent.ACTION_OPEN_DOCUMENT_TREE
Странно, что этот код работает как невыпущенный APK, но не как выпустите APK.
В любом случае. Большое спасибо, что прочитали этот вопрос.
Надеюсь, я смогу найти ответ.

Подробнее здесь: https://stackoverflow.com/questions/612 ... ile-when-w
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»