应用已停止 - 从firebase中重新获取数据

时间:2017-10-16 08:19:54

标签: android firebase

我不知道代码有什么问题..

当我输入信息时,我的应用显示 - 不幸停止了。 要访问这两个区域,我已将String声明为顶部。 IDE也不会显示任何错误。

我也从stackoverflow中得到了一些答案但是,错误仍然是一样的。

我想从这里检索数据 My Firebase data

我的代码是 -

public class LoginPage extends AppCompatActivity {

FirebaseDatabase database;
DatabaseReference myRef;
String name, password, email, edtName, edtPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_page);

    final EditText uname, pass;
    Button login, signup;

    uname = (EditText) findViewById(R.id.editUsername);
    pass = (EditText) findViewById(R.id.editPassword);
    login = (Button) findViewById(R.id.buttonLogin);
    signup = (Button) findViewById(R.id.buttonSignup);

    edtName = uname.getText().toString();
    edtPassword = pass.getText().toString();

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(LoginPage.this, "Button Tapped", Toast.LENGTH_SHORT).show();
            DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference("sampBase");
            DatabaseReference zone1Ref = zonesRef.child(name);
            DatabaseReference zone1NameRef = zone1Ref.child("Name");
            DatabaseReference zone1PassRef = zone1Ref.child("Password");

            // name retrive
            zone1NameRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    name = dataSnapshot.getValue(String.class);
                    Toast.makeText(LoginPage.this, name+" is name", Toast.LENGTH_SHORT).show();
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            // password retrive
            zone1PassRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    password = dataSnapshot.getValue(String.class);
                    if(password != edtPassword){
                        Toast.makeText(LoginPage.this, "Wrong password.!", Toast.LENGTH_SHORT).show();
                        pass.setText("");
                        return;
                    }
                    else{
                        Toast.makeText(LoginPage.this, "Login Successful.!", Toast.LENGTH_SHORT).show();

                        Intent i = new Intent(LoginPage.this, HomePage.class);
                        i.putExtra("Name", name);
                        startActivity(i);

                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    });

  }
}

1 个答案:

答案 0 :(得分:1)

您尚未将asharfulais值分配给name变量。

当我阅读你的代码时,我无法注意到这项任务。如果我是正确的,那么您的name为空,并且您无法将null传递给child()方法。

您可以通过在获得任何进一步(更深入)参考之前简单地指定值来解决此问题。

name ="asharfulais";

注意:

  1. 由于您的应用可能拥有更多用户,因此您应该考虑检索用户ID而不是声明其用户名。
  2. 优良作法是声明字符串变量(数据库中的子名称)永远不会在单独的类中更改为常量(例如,Constants.java)。