Я читал много постов StackOverflow, в которых обсуждается копирование данных из FileSystemStorage в хранилище в CodenameOne, как описано в этом ответе от Shai, как показано ниже:
InputStream stream =
FileSystemStorage.getInstance().openInputStream(i);
OutputStream out =
Storage.getInstance().createOutputStream("MyImage");
Util.copy(stream, out);
Util.cleanup(stream);
Util.cleanup(out);`
Я пытался сделать обратное: сохранить из хранилища в FileSystemStorage, чтобы показать PDF в компоненте Browser (при использовании iOS), но не смог этого сделать. Мне нужно показать PDF в приложении (поэтому я не хочу использовать Display.getInstance().execute()
).
По сути, я пытаюсь динамически заполнить Контейнер теми файлами, которые выберет пользователь - я использую библиотеку FileChooser для CN1 от Стива Ханны . (Отказ от ответственности: я внес небольшие изменения в эту библиотеку, так как она использовалась в приложении, над которым я работаю ... ОДНАКО, когда я выбираю изображения с этой библиотекой и перетаскиваю их из хранилища в изображение через InputStream, они отлично отображаются в ImageViewer поэтому я знаю, что все файлы правильно сохраняются в хранилище.)
Вот мой код (с помощью комментария Стива Ханны к GitHub ):
//fileLocation and fileName are slightly different but both end with file extension
File file = new File(fileToUpload.getFileName());
FileSystemStorage fss = FileSystemStorage.getInstance();
InputStream is = Storage.getInstance().createInputStream(fileToUpload.getLocation());
OutputStream os = fss.openOutputStream(file.getAbsolutePath());
Util.copy(is, os);
ToastBar.Status status = ToastBar.getInstance().createStatus();
String message = file.exists() + " " + file.isFile() + file.getAbsolutePath();
status.setMessage(message);
status.setExpires(3000);
status.show();
NativeLogs.getNativeLogs();
if (Display.getInstance().getPlatformName().equals("ios")) {
//Log.p("in ios !!!!");
BrowserComponent browserComponent = new BrowserComponent();
browserComponent.setURL(file.getPath());
horizontalContainer.add(browserComponent);
}
ToastBar отображает true
и true
для file.exists()
и file.isFile()
.
Я оговариваю iOS, потому что, насколько я видел при исследовании предварительного просмотра PDF-файлов в приложении , я видел, что Android должен иметь другую реализацию, например, добавление NativeInterface с библиотекой Android. Я также видел в разных ответах в группе Google, что эта функция (с помощью browserComponent для просмотра PDF-файлов) доступна только для iOS, а не на симуляторе. В симуляторе я вижу пустое пространство. Мой iPhone просто зависает и / или вылетает после отображения ToastBar (и я работаю на компьютере с Windows, поэтому не так много возможности видеть собственные журналы ....)
Что я могу сделать, чтобы получить доступ к файлу и показать его в компоненте Browser?
Спасибо!