2016-09-05 4 views
0

У меня есть проект Gluon Mobile JavafX.NullPointerException, когда я пытаюсь прочитать ресурс

Я пытаюсь прочитать ресурс из моего apk, и я получаю сообщение об ошибке только в Android.

private void leerConfiguracion() { logger.log(Level.INFO, "ConfiguradorGeneralService:leerConfiguracion: BEGIN ... "); 

    try 
    { 

     File fileLugares = new File(ConfiguradorGeneralService.class.getResource("/com/registrodevisitas/json/configuracion.json").getFile()); 


     logger.log(Level.INFO, "ConfiguradorGeneralService:leerConfiguracion: Leyendo configuración: " + fileLugares.getAbsolutePath()); 

     // create a FileClient to the specified File 

     FileClient fileClient = FileClient.create(fileLugares); 

     // create a JSON converter that converts the nodes from a JSON array into language objects 

     InputStreamIterableInputConverter<ConfiguradorGeneral> converter = new JsonIterableInputConverter<>(ConfiguradorGeneral.class); 

     // retrieve a list from a ListDataReader created from the FileClient 

     configuracion = DataProvider.retrieveList(fileClient.createListDataReader(converter)); 


    } 
    catch(Exception e) 
    { 
     logger.log(Level.SEVERE, e.getMessage(), e); 
    } 

    logger.log(Level.INFO, "ConfiguradorGeneralService:leerConfiguracion: END "); 


} 

Ошибка на Android является:

I/figuradorGeneralService(11481): ConfiguradorGeneralService:leerConfiguracion: BEGIN ... 
E/figuradorGeneralService(11481): null 
E/figuradorGeneralService(11481): java.lang.NullPointerException 
E/figuradorGeneralService(11481):  at com.registrodevisitas.services.ConfiguradorGeneralService.leerConfiguracion(ConfiguradorGeneralService.java:50) 
E/figuradorGeneralService(11481):  at com.registrodevisitas.services.ConfiguradorGeneralService.<init>(ConfiguradorGeneralService.java:34) 
E/figuradorGeneralService(11481):  at java.lang.Class.newInstanceImpl(Native Method) 
E/figuradorGeneralService(11481):  at java.lang.Class.newInstance(Class.java:1208) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.lambda$getDefaultInstanceSupplier$8(Injector.java:233) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.access$lambda$3(Injector.java) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector$$Lambda$4.apply(Unknown Source) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.instantiateModelOrService(Injector.java:116) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.injectMembers(Injector.java:151) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.injectMembers(Injector.java:136) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.injectAndInitialize(Injector.java:129) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.registerExistingAndInject(Injector.java:107) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.injection.Injector.instantiatePresenter(Injector.java:60) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.views.FXMLView.lambda$loadSynchronously$2(FXMLView.java:89) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.views.FXMLView.access$lambda$1(FXMLView.java) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.views.FXMLView$$Lambda$2.call(Unknown Source) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:929) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
E/figuradorGeneralService(11481):  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.views.FXMLView.loadSynchronously(FXMLView.java:91) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.views.FXMLView.initializeFXMLLoader(FXMLView.java:100) 
E/figuradorGeneralService(11481):  at com.airhacks.afterburner.views.FXMLView.getView(FXMLView.java:112) 
E/figuradorGeneralService(11481):  at com.registrodevisitas.RegistroDeVisitas.lambda$init$0(RegistroDeVisitas.java:55) 
E/figuradorGeneralService(11481):  at com.registrodevisitas.RegistroDeVisitas.access$lambda$0(RegistroDeVisitas.java) 
E/figuradorGeneralService(11481):  at com.registrodevisitas.RegistroDeVisitas$$Lambda$1.get(Unknown Source) 
E/figuradorGeneralService(11481):  at com.gluonhq.impl.charm.a.d.a.a(SourceFile:32) 
E/figuradorGeneralService(11481):  at com.gluonhq.charm.glisten.application.MobileApplication.a(SourceFile:620) 
E/figuradorGeneralService(11481):  at com.gluonhq.charm.glisten.application.MobileApplication.switchView(SourceFile:391) 
E/figuradorGeneralService(11481):  at com.gluonhq.charm.glisten.application.MobileApplication.switchView(SourceFile:368) 
E/figuradorGeneralService(11481):  at com.gluonhq.charm.glisten.application.MobileApplication.start(SourceFile:218) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$144(LauncherImpl.java:863) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.LauncherImpl.access$lambda$8(LauncherImpl.java) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.LauncherImpl$$Lambda$9.run(Unknown Source) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$157(PlatformImpl.java:326) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl.access$lambda$6(PlatformImpl.java) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl$$Lambda$7.run(Unknown Source) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl.lambda$null$155(PlatformImpl.java:295) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl.access$lambda$18(PlatformImpl.java) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl$$Lambda$19.run(Unknown Source) 
E/figuradorGeneralService(11481):  at java.security.AccessController.doPrivileged(AccessController.java:52) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl.lambda$runLater$156(PlatformImpl.java:294) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl.access$lambda$5(PlatformImpl.java) 
E/figuradorGeneralService(11481):  at com.sun.javafx.application.PlatformImpl$$Lambda$6.run(Unknown Source) 
E/figuradorGeneralService(11481):  at com.sun.glass.ui.monocle.RunnableProcessor.runLoop(RunnableProcessor.java:92) 
E/figuradorGeneralService(11481):  at com.sun.glass.ui.monocle.RunnableProcessor.run(RunnableProcessor.java:51) 
E/figuradorGeneralService(11481):  at java.lang.Thread.run(Thread.java:8 
I/figuradorGeneralService(11481): ConfiguradorGeneralService:leerConfiguracion: END 

Этот файл находится на RESOURCE/COM ....

enter image description here

Этот метод отлично работает на окнах.

Любая помощь будет приятной. Спасибо.

ответ

0

В Android (и iOS) вы не можете напрямую обращаться к ресурсам класса Path как к файлу, как на рабочем столе. Вместо этого вам необходимо получить доступ к ресурсам с помощью InputStream. Это работает на всех поддерживаемых платформах (Android, iOS и на рабочем столе).

Попробуйте получить доступ к ресурсу с помощью следующего кода:

BasicInputDataSource source = new BasicInputDataSource(ConfiguradorGeneralService.class.getResourceAsStream("/com/registrodevisitas/json/configuracion.json")); 

InputStreamIterableInputConverter<ConfiguradorGeneral> converter = new JsonIterableInputConverter<>(ConfiguradorGeneral.class); 

configuracion = DataProvider.retrieveList(new InputStreamListDataReader<>(source, converter));