使用Firebase实时数据库检索单个字符串值而不监听更改



这是我当前的代码,但是它不起作用

我试图检索单个字符串值(数据)不监听使用Firebase实时数据库的变化

但是当我运行这段代码时,我得到email[0]为空。

并且Log.e("Email#1", "hello");从未在我的logcat中弹出,给我的感觉是它从未真正进入addListenerForSingleValueEvent()

 username=(EditText)findViewById(R.id.username);
     password=(EditText)findViewById(R.id.password);

    Firebase.setAndroidContext(this);
    final Button login=(Button)findViewById(R.id.loginbtn);
    final Firebase ref=new Firebase("//fir-learn-4991c.firebaseio.com/Users/Sriharsha/email");
    //assert login != null;
    assert login != null;
    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            login.setText("Loading...");
           final FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference dref=database.getReference("email");
            final String user=username.getText().toString();
            final String[] email = new String[1];
            dref.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                    Message post = dataSnapshot.getValue(Message.class);
                    Log.e("Email#1","hello yo");
                    //System.out.println(post);
                    //Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue();
                    email[0]=post.getEmail();
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {
                    System.out.println("The read failed: " + databaseError.getCode());
                }
            });

这是类:Message:-

  public class Message {
    private  String email;
    public Message(){
    }
    public void message(String email)
    {
        this.email=email;
    }
    public String getEmail()
    {
        return email;
    }
 }

这是我的Firebase数据库:Firebase数据库图片

您的侦听器设置在参考email上(如果它不存在,因此不会触发侦听器),而看起来您的电子邮件字符串实际上存储在Users/<username?>/email。您可能需要相应地更改dref

我解决了。谢谢大家。我只是没有使用字符串数组,并且还以不同的方法创建了它,以从firebase获得直接字符串值。

Firebase ref=new Firebase("//fir-learn-4991c.firebaseio.com/Users/"+user);
            Firebase ref1=ref.child("email");
            final String pass=password.getText().toString();
            //Log.e("dref",dref.toString());
            ref1.addValueEventListener(new com.firebase.client.ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String post=dataSnapshot.getValue(String.class);
                    Log.v("Email#1",post);
                    authentication(post,pass,user);
                }
                @Override
                public void onCancelled(FirebaseError firebaseError) {
                }
            });
            Log.e("Email",""+ email[0]);
            Log.e("Ref",""+ ref);
        }
    });
}
public void newActivity(String email, String pass, String user)
{
    Intent intent = new Intent(Login.this, THSTheApp.class);
    intent.putExtra("email",email);
    intent.putExtra("UserName", user);
   intent.putExtra("Password", pass);// pass your values and retrieve them in the other Activity using keyName
    startActivity(intent);
}
public void x()
{
    Toast.makeText(Login.this, "There Was A Problem",
            Toast.LENGTH_SHORT).show();
    username.setText("");
    password.setText("");
}
public void authentication(final String email1, final String pass,final String user)
{
    mAuth = FirebaseAuth.getInstance();
    mAuth.signInWithEmailAndPassword(email1, pass).addOnCompleteListener(Login.this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if(task.isSuccessful())
            {
                newActivity(email1,pass,user);
            }
            else if (!task.isSuccessful()) {
                x();
            }
        }
    });
}

}

最新更新