【问题标题】:App Stopped - Retriving data from firebase应用停止 - 从 firebase 检索数据
【发布时间】:2017-10-16 08:19:53
【问题描述】:

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

当我输入信息时,我的应用程序显示 - 不幸的是停止了。 为了访问这两个区域,我在顶部声明了字符串。 IDE 也没有显示任何错误。

我也关注了stackoverflow的一些答案,但是,错误仍然是一样的。

我想从这里检索数据

我的代码是 -

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) {

                }
            });
        }
    });

  }
}

【问题讨论】:

标签: android firebase


【解决方案1】:

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

因为我已经阅读了您的代码,所以我没有注意到分配。如果我是正确的,你的name 是空的,你不能将null 传递给child() 方法。

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

name ="asharfulais";

注意事项:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多