파이어베이스 로그인 오류1
본문 바로가기

Mobile App 개발/Java, 안드로이드 스튜디오

파이어베이스 로그인 오류1

728x90
반응형

오류 상황:

파이어베이스 구글 로그인 후, main activity로 넘어갈 때 앱이 종료됨

logcat을 확인해보니 메인에 위치한 프레그먼트

firebaseUser = firebaseAuth.getCurrentUser에서 on null object reference 라는 오류발생


오류 원인:
파이어베이스 리얼타임 데이터베이스에 연결하지 않음


오류 해결:

로그인 액티비티 firebaseAuthWithGoogle()에 다음과 같이 코드를 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
        AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(thisnew OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){
                            DLog.d("signInWithCredential: success");
                            final FirebaseUser firebaseUser = mAuth.getCurrentUser();
                            final User user = new User();
                            user.setEmail(firebaseUser.getEmail());
                            user.setName(firebaseUser.getDisplayName());
                            user.setUid(firebaseUser.getUid());
                            if (firebaseUser.getPhotoUrl() != null){ user.setProfileUrl(firebaseUser.getPhotoUrl().toString()); }
 
                            mDBReference.child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                    if (! dataSnapshot.exists()){
                                        mDBReference.child(firebaseUser.getUid()).setValue(user, new DatabaseReference.CompletionListener() {
                                            @Override
                                            public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
                                                if (databaseError == null){
                                                    //DLog.d("DB에러없음");
                                                    Toast.makeText(LoginActivity.this"DB에러없음", Toast.LENGTH_LONG).show();
                                                }else{
                                                    DLog.w("DB 에러 발생");
                                                }
                                                startActivity(new Intent(LoginActivity.this, MainActivity.class));
                                                finish();
                                                Bundle eventBundle = new Bundle();
                                                eventBundle.putString("email", firebaseUser.getEmail());
                                                mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.LOGIN, eventBundle);
                                            }
                                        });
                                    }
                                }
 
                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) { }
                            });
                            updateUI(firebaseUser);
                        }else {
                            DLog.w("signInWithCredential: failure");
                            updateUI(null);
                        }
                    }
                });
    }
cs


728x90
반응형