Получение исключения NullPointerException в FirebaseUser.getUid () - PullRequest
0 голосов
/ 28 мая 2020

Я получаю ошибку «NullPointerException: firebase.auth.FirebaseUser.getUid () при ссылке на нулевой объект». Дело в том, что мой FirebaseUser.getUid () не равен нулю. Я проверил это с помощью log.d и обнаружил, что идентификатор пользователя совпадает с идентификатором в firebase. Так что я не знаю, в чем может быть проблема. Пожалуйста, помогите

Вот код:

//tabLayout sets up the tabs to switch from chats <--> user
    //viewPager allows swiping motion between tabs
    tabLayout = findViewById(R.id.tablayout);
    viewPager = findViewById(R.id.viewpager);


    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    reference = FirebaseDatabase.getInstance().getReference("Chats");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            //we need to create adapter using ViewPager --> create ViewPageAdapter
            ViewPageAdapter viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager());
            //counter for # of unread messages
            int unread = 0;

            //create chat objects from firebase data
            //----------------------------ERROR STARTS HERE--------------------------------
            for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Chat chat = snapshot.getValue(Chat.class);
                Log.d("firebaseUserID", firebaseUser.getUid());

                //if firebaseUser is the receiver of text and they have not opened text yet --> increment unread
                    if (chat.getReceiver().equals(firebaseUser.getUid()) && !chat.isSeen()) {
                        unread++;
                    }
            }
            //set on viewPager accordingly
            if(unread == 0) {
                //make ChatsFragment obj inside adapter
                viewPageAdapter.addFragment(new ChatsFragment(), "Chats");
            }
            else {
                //make ChatsFragment obj inside adapter
                viewPageAdapter.addFragment(new ChatsFragment(), "(" + unread + ") Chats");
            }

            //make UsersFragment obj inside adapter
            viewPageAdapter.addFragment(new UsersFragment(), "Users");
            //set adapter to ViewPager
            viewPager.setAdapter(viewPageAdapter);
            //set ViewPager to tabLayout
            tabLayout.setupWithViewPager(viewPager);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

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

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.moneymoves, PID: 31665
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
    at com.example.moneymoves.MainActivity$1.onDataChange(MainActivity.java:73)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.3.0:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.3.0:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.3.0:55)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)

И это это то, что выводит моя функция журнала

D / firebaseUserID: XHYXsfwQJQXcy3lOhFeM08vwity1

Таким образом, FirebaseUser не должен быть нулевым, верно?

1 Ответ

1 голос
/ 28 мая 2020

Попробуйте объявить String firebaseUserId = firebaseUser.getUid(); и использовать его в нужных местах. Кроме того, используйте assert firebaseUser != null; над объявлением String, чтобы избежать ошибок ссылки на нулевой объект.

Это должно выглядеть так:

assert firebaseUser != null;
String firebaseUserId = firebaseUser.getUid();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...