2017-10-16 91 views
-2

Retriving数据我不知道什么是错的代码..应用程序已停止 - 从火力

当我输入的信息,我的应用程序显示了 - 可惜停止。 要访问这两个区域,我已经在顶部声明了字符串。 IDE也不显示任何错误。

我也跟着从stackoverflow一些答案,但错误仍然是一样的。

我想从这里 My Firebase data

retrive数据和我的代码 -

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

       } 
      }); 
     } 
    }); 

    } 
} 
+0

我想'DatabaseReference zone1Ref = zonesRef.child(名);''name'是在这一点上 – Omer

+0

打印堆栈跟踪,请空,检查:https://stackoverflow.com/questions/7841232/java -Android-如何对打印出一个全栈追踪 –

回答

1

你还没有指定asharfulaisname变量。

由于我已经阅读了您的代码,我无法注意到这项任务。如果我是正确的,你的name为空,你不能通过nullchild()方法。

您可以通过在获取任何更深的参考之前简单地分配值来解决此问题。

name ="asharfulais"; 

注:

  1. 作为您的应用程序可能有更多的用户,你应该考虑检索用户的ID的,而不是宣布他们的用户名。
  2. 最好的做法是声明字符串变量(数据库中的子类名称),这些字符串变量在单独的类中(例如Constants.java)永远不会改变为常量。
相关问题