首页 > 解决方案 > 用户在firebase中不存在?

问题描述

当我输入一个存在于我的数据库中的用户 ID 然后它成功登录时,我对 firebase 进行了身份验证,但是当我输入一个不在我的 firebase 中的错误密钥时,apk 就会崩溃。

private DatabaseReference ref;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        userID = (EditText) findViewById(R.id.Username);
        ref = FirebaseDatabase.getInstance().getReference().child("muhamadgamerstrings");
    }

     public void btnlogin_Click(View view) {
        final String usrID = userID.getText().toString();

         try {
        ref.child(usrID).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                muhamadgamerstrings Userr = dataSnapshot.getValue(muhamadgamerstrings.class);
                if(usrID.equals(Userr.getUserID()))
                {
                    Toast.makeText(MainActivity.this,
                            "login Succesful",Toast.LENGTH_SHORT).show();
                    Intent start = new Intent(MainActivity.this,start.class);
                    startActivity(start);
                }else {
                    Toast.makeText(MainActivity.this,
                            "Wrong Key",Toast.LENGTH_SHORT).show();
                }

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

            }
        });
        }catch (Exception xe){
            Toast.makeText(MainActivity.this,
                    "login false",Toast.LENGTH_SHORT).show();
        }

    }

}

那是我的主要活动。错误来自 logcat:

if(usrID.equals(Userr.getUserID())) java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.yuhamadgamer.loginwithfire.muhamadgamerstrings.getUserID()' on a null object reference

标签: androidfirebasefirebase-realtime-database

解决方案


Firebase 实时数据库muhamadgamerstrings中的值为 null。

因为

当我输入错误的密钥时,这不是我的火力基地,那么 apk 就会崩溃

当您键入一个不在数据库中的 id 时,数据库将发送一个空快照。这就是NullPointerException的原因。

所以你需要在进行操作之前检查它是否为空

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                muhamadgamerstrings Userr = dataSnapshot.getValue(muhamadgamerstrings.class);
                if(Userr != null && usrID.equals(Userr.getUserID()))
                {
                    Toast.makeText(MainActivity.this,
                            "login Succesful",Toast.LENGTH_SHORT).show();
                    Intent start = new Intent(MainActivity.this,start.class);
                    startActivity(start);
                }else {
                    Toast.makeText(MainActivity.this,
                            "Wrong Key",Toast.LENGTH_SHORT).show();
                }

            }

推荐阅读