addValueEventListener для FireBase чтения данных, возвращающих ноль на Android 6.0 - PullRequest
1 голос
/ 06 марта 2019

У меня есть класс ниже.Когда вызывается метод readJson, я получаю исключение нулевого указателя в Android 6.0.Как мне починить NPE?Он работает нормально на большинстве устройств и версий, но, похоже, не работает на Android 6.0.Я искал ответы, но не смог найти проблему в коде. Я получаю NPE при попытке доступа к переменным экранов.

public class UserRepository {

    private static UserRepository instance = null;
    final String TAG = UserRepository.class.getName();
    public Resorts resortsData;
    public AppSettings appSettingsData;

    @Inject
    public Resources resources;

    public static synchronized UserRepository getInstance(){
        if (instance == null){
            instance = new UserRepository();
        }
        return instance;
    }

    public void readJson(){

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        String lang = Locale.getDefault().getLanguage();
        DatabaseReference myRef = database.getReference(lang);

        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // This method is called once with the initial value and again
                // whenever data at this location is updated.
                resortsData = dataSnapshot.getValue(Resorts.class);
                boolean hasChild = dataSnapshot.hasChild("appSettings");
                if (hasChild){
                    DataSnapshot appSettings = dataSnapshot.child("appSettings");
                    appSettingsData = appSettings.getValue(AppSettings.class);
                    Log.e("NAG",appSettingsData.screens.toString());
                }


                //Resorts resortsData = resort.getValue(Resorts.class);
            }

            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
                Log.w(TAG, "Failed to read value.", error.toException());
            }
        });

    }
}

public class AppSettings {
    public ArrayList<ApiEndpoints> apiEndpoints;
    public Screens screens;
    public GlobalStrings globalStrings;
}

public class Screens {
    public RegisterStay registerStay;
    public CalendarScreen calendar;
    public RegisterError registerError;
    public BookingNumber bookingNumber;
    public InDestDashboard inDestDashboard;
    public PreDestDashboard preDestDashboard;
    public LocalExcursions localExcursions;
    public PreDestMenu preDestMenu;
    public InDestMenu inDestMenu;
    public EmailSubscribe emailSubscribe;
    public UnregisteredLanding unregisteredLanding;
}

Сообщение об ошибке

Caused by java.lang.NullPointerException: Attempt to read from field 'com.royalton.mobileapp.common.repositories.models.appSettings.screens.Screens com.royalton.mobileapp.common.repositories.models.appSettings.AppSettings.screens' on a null object reference
      at com.royalton.mobileapp.base.AppModule.providesEmailSubscribeScreen(AppModule.java:192)
      at com.royalton.mobileapp.base.AppModule_ProvidesEmailSubscribeScreenFactory.get(AppModule_ProvidesEmailSubscribeScreenFactory.java:19)
      at com.royalton.mobileapp.base.AppModule_ProvidesEmailSubscribeScreenFactory.get(AppModule_ProvidesEmailSubscribeScreenFactory.java:8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...