记录时获取firebase用户详细信息,并在注销时忽略

时间:2018-01-01 10:31:57

标签: android firebase firebase-realtime-database firebase-authentication

我有一个片段,根据一天中的时间和星期几在textview中打印一条消息。我想打印登录的名字,但如果用户注销,则应忽略该名字。 登录后应用程序运行正常,但我尝试调用虚拟方法' java.lang.String com.google.firebase.auth.FirebaseUser.getUid()'我在注销时在空对象引用上。

String userID;
String currentUserId;
FirebaseAuth mAuth;
String mDayGreet;
String weekDay;
DatabaseReference dbReference = FirebaseDatabase.getInstance().getReference();
public static final String USER_ID_EXTRA_KEY = "EXTRA_KEY";

userID = getActivity().getIntent().getStringExtra(USER_ID_EXTRA_KEY);


    mAuth = FirebaseAuth.getInstance();
    FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    if (firebaseUser!= null) {
        currentUserId = firebaseUser.getUid();
    }


    dbReference.child("AllUsers").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("profile").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            User userDetail = dataSnapshot.getValue(User.class);

            Calendar mCalendar = Calendar.getInstance();
            SimpleDateFormat mFormatDate = new SimpleDateFormat("HH");
            String mDateString = mFormatDate.format(mCalendar.getTime());

            int time = Integer.parseInt(mDateString);
            TextView greeting = view.findViewById(R.id.greeting);
            int dayOfWeek = mCalendar.get(Calendar.DAY_OF_WEEK);
            TextView dayInfo = view.findViewById(R.id.info);

            if (Calendar.MONDAY == dayOfWeek) {
                if (time >= 0 && time < 18) {
                    weekDay = getString(R.string.monday);
                }
            }

            dayInfo.setText(weekDay);

            if (time >= 0 && time < 12)
                if (currentUserId == null) {
                    mDayGreet = getString(R.string.morning);
                } else {
                    mDayGreet = getString(R.string.morning) + " " + userDetail.getFirstName();
                }

            greeting.setText(mDayGreet);

1 个答案:

答案 0 :(得分:0)

您正在使用FirebaseAuth.getInstance().getCurrentUser().getUid()作为child数据库引用方法的参数。但是当用户未登录时,语句FirebaseAuth.getInstance().getCurrentUser()将返回null,并且当您尝试在其上调用方法时,最终将获得NullPointerException

一种解决方案是在用户登录时将用户ID保存在共享首选项中,如果用户下次未登录,则可以从共享首选项而不是FirebaseAuth获取用户ID