Исключение при использовании Gluon-mobile ShareService для открытия PDF из приложения на android - PullRequest
0 голосов
/ 02 марта 2020

В моем приложении я хотел бы показать пользователю файл справки (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)
...

Выдаемое исключение выглядит одинаково для обоих случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...