2017-10-15 79 views
0

我的应用正在将用户保存在my firebase database中,但是当我尝试读取对象的值时,它始终返回null。我的firebase的规则都是真实的,应用程序正在保存用户。我不知道为什么我不能读取数据,为什么它总是返回null。这是我的MainActivity类别:从Firebase数据库检索数据为空

package com.example.leo_o.testfirebase; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener { 

private Button saveButton; 
private EditText nameEditText; 
private DatabaseReference mDatabase; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mDatabase = FirebaseDatabase.getInstance().getReference("users"); 
    saveButton = (Button) findViewById(R.id.saveButton); 
    nameEditText = (EditText) findViewById(R.id.nameEditText); 
} 

private void saveUser(String name) { 
    User user = new User(name); 
    String userId = mDatabase.push().getKey(); 
    mDatabase.child(userId).setValue(user); 
} 

public void getData() { 
    ValueEventListener userListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      User user = dataSnapshot.getValue(User.class); 
      String name = user.getName(); 
      if (name == null) { 
       Toast.makeText(MainActivity.this, "Null value", Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }; 
    mDatabase.addValueEventListener(userListener); 
} 

@Override 
public void onClick(View view) { 
    if (view == saveButton) { 
     String name = nameEditText.getText().toString(); 
     saveUser(name); 
     getData(); 
    } 
} 

}

的,这是我的用户等级:

package com.example.leo_o.testfirebase; 

public class User { 

public String name; 

public User() { 
} 

public User(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

}

有谁知道什么是错我的代码,为什么它总是返回null?

回答

0

您的mDatabase指向firebase中的“用户”节点,因此您在“onDataChange”中获得的值是用户列表,而不是单个用户。

看你是如何设置的值:mDatabase.child(用户ID).setValue()

你需要做同样的,如果你只是想获得一个用户的详细信息。将值事件附加到userId节点。

或者,您也可以在mDatabase上使用子事件侦听器。

相关问题