마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 파이어베이스 로그인

0 추천

파이어베이스 DB에 있는 데이터를 기반으로 로그인 처리를 하는 과정입니다.

getPass()를 통해서 값을 가져와서 확인하고 싶은데 뭐가 문제인지 잘 모르겠습니다... 조언 부탁드립니다.

public class MemberDB {
    public String name;
    public String age;
    public String pass;
    public String id;
    public String type;

    public MemberDB(){}

    public MemberDB(String id, String pass, String name, String age, String type){
        this.id = id;
        this.pass = pass;
        this.name = name;
        this.age = age;
        this.type = type;
    }

    public String getId() {return id;}
    public void setId(String id) {this.id = id;}

    public String getPass() {return pass;}
    public void setPass(String pass) {this.pass = pass;}

    public String getName() {return name;}
    public void setName(String name) {this.name = name;}

    public String getAge() {return age;}
    public void setAge(String age) {this.age = age;}

    public String getType() {return type;}
    public void setType(String type) { this.type = type;}
}
public void onClick(View view) {

    databaseReference.equalTo(userid.getText().toString()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            MemberDB memberDB = snapshot.getValue(MemberDB.class);

            if (memberDB.getPass().equals(password.getText().toString())) {
                Toast.makeText(LoginActivity.this, "success", Toast.LENGTH_SHORT).show();
                Log.d("pass", memberDB.getPass());
            }
        }

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

        }
    });
2022-12-04 16:00:10.464 19716-19716/com.example.petinfo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.petinfo, PID: 19716
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.petinfo.MemberDB.getPass()' on a null object reference
        at com.example.petinfo.LoginActivity$1$1.onDataChange(LoginActivity.java:62)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7898)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
TheFlash#3 (200 포인트) 님이 2022년 12월 4일 질문

1개의 답변

0 추천
 
채택된 답변
로그에 의하면, 아래 코드가 문제로 보이네요.
MemberDB memberDB = snapshot.getValue(MemberDB.class)

memberDB가 널이라서 발생하는 에러로 보입니다.

즉, shapshot를 MemberDB 인스턴스로 변환하지 못했기 때문인데, 그 말은 파이이에베이스에 정의된 구조와 MemberDB가 맞지 않는다는 말이 됩니다.
서로의 구조를 잘 비교해 보세요. 해당 라인에 브레이크포인트를 거시고 디버그 모드에서 snapshot 내부를 확인해 보세요.

 

참고로 파이어베이스를 이용한 로그인은 가능하면 FirebaseAuth 모듈을 이용하시는 걸 추천합니다. 단순히 사용자정보를 비교하는 방법으로 직접 로그인을 구현하시는 건 보안적인 측면에서 상당히 취약한 방법입니다. 특히 비밀번호가 암호화 되지도 않은 상태라면 더더욱 그럴 것 같습니다.

 

 

spark (226,420 포인트) 님이 2022년 12월 4일 답변
TheFlash#3님이 2022년 12월 11일 채택됨
...