В моем приложении я хотел бы показать пользователю файл справки (PDF). Файл справки публикуется вместе с ресурсами и по первому запросу копируется в хранилище c. Это работает! Я могу просмотреть файл и открыть его с помощью Adobe Acrobat на устройстве.
Но при вызове Gluon-mobile ShareService у меня возникает исключение: Попытка вызвать виртуальный метод 'android .content.res. XmlResourceParser android .content.pm.ProviderInfo.loadXmlMetaData (android .content.pm.PackageManager, java .lang.String) 'для ссылки на пустой объект
Я использую ShareService 3.8 .6 на Android 9.1.
Вот код:
private void onHelp(ActionEvent event)
{
Optional<StorageService> oss = Services.get(StorageService.class);
if(oss.isPresent())
{
StorageService ss = oss.get();
Optional<File> of = ss.getPublicStorage("");
if(of.isPresent())
{
File parentfolder = of.get();
if(parentfolder != null && parentfolder.exists() && parentfolder.canWrite())
{
File publicPdf = new File(parentfolder.getAbsolutePath(), "helpfile.pdf");
if(!publicPdf.exists())
{
InputStream origPdf = getClass().getClassLoader().getResourceAsStream("files/helpfile.pdf");
try {
FileOutputStream fos = new FileOutputStream(publicPdf);
while (origPdf.available() > 0) {
fos.write(origPdf.read());
}
fos.close();
origPdf.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
try {
//EDIT:
System.out.println(publicPdf.getAbsolutePath() + " exists: "
+ publicPdf.exists()+ " canRead: "+ publicPdf.canRead());
Services.get(ShareService.class).ifPresent(service -> {
service.share("application/pdf", publicPdf);
});
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
}
РЕДАКТИРОВАТЬ : я добавил System.out.println как раз перед ShareService и adb logcat показывает
03-02 17:30:24.119 20119 20146 I System.out: /storage/emulated/0/helpfile.pdf exists: true canRead: true
EDIT2 :
выход logcat с установленным System.setProperty("com.gluonhq.charm.down.debug","true")
плюс e.printStackTrace()
в catch(Exception e)
после service.share(...)
.
I System.out: /storage/emulated/0/helpfile.pdf exists: true canRead: true
I AndroidShareService: File to share: /storage/emulated/0/helpfile.pdf
I AndroidShareService: Application name provider: com.myapp.ui.javafx.fileprovider
W myapp.ui.javaf: Class android.support.v4.content.FileProvider failed lock verification and will run slower.
W System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
W System.err: at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:584)
W System.err: at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:558)
W System.err: at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400)
W System.err: at com.gluonhq.charm.down.plugins.android.AndroidShareService.share(AndroidShareService.java:105)
W System.err: at com.gluonhq.charm.down.plugins.android.AndroidShareService.share(AndroidShareService.java:82)
W System.err: at com.myapp.ui.javafx.GMMain.lambda$onHelp$1(GMMain.java:280)
W System.err: at com.myapp.ui.javafx.GMMain$$Lambda$3.accept(Unknown Source:8)
W System.err: at java.util.Optional.ifPresent(Optional.java:155)
W System.err: at com.myapp.ui.javafx.GMMain.onHelp(GMMain.java:279)
...
вывод logcat при доступе к частному хранилищу Optional<File> of = ss.getPrivateStorage();
:
I System.out: /data/user/0/com.myapp.ui.javafx/files/helpfile.pdf exists: true canRead: true
I AndroidShareService: File to share: /data/user/0/com.myapp.ui.javafx/files/helpfile.pdf
I AndroidShareService: Application name provider: com.myapp.ui.javafx.fileprovider
W myapp.ui.javaf: Class android.support.v4.content.FileProvider failed lock verification and will run slower.
W System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
W System.err: at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:584)
W System.err: at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:558)
W System.err: at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400)
W System.err: at com.gluonhq.charm.down.plugins.android.AndroidShareService.share(AndroidShareService.java:105)
W System.err: at com.gluonhq.charm.down.plugins.android.AndroidShareService.share(AndroidShareService.java:82)
W System.err: at com.myapp.ui.javafx.GMMain.lambda$onHelp$1(GMMain.java:280)
W System.err: at com.myapp.ui.javafx.GMMain$$Lambda$3.accept(Unknown Source:8)
W System.err: at java.util.Optional.ifPresent(Optional.java:155)
W System.err: at com.myapp.ui.javafx.GMMain.onHelp(GMMain.java:279)
...
Выдаемое исключение выглядит одинаково для обоих случаев.