android-snapshot.getvalue指向空指针
我使用一个接口从数据库中检索数据并使用它,起初我使用字符串时,它工作正常,但在我想要得到整个孩子后,我一直得到一个空指针,下面是整个类,但空指针位于android-snapshot.getvalue指向空指针,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我使用一个接口从数据库中检索数据并使用它,起初我使用字符串时,它工作正常,但在我想要得到整个孩子后,我一直得到一个空指针,下面是整个类,但空指针位于uti变量中的checkUser方法中的部分 package com.android.pfe.other; import android.support.annotation.Keep; import android.util.Log; import android.widget.Toast; import com.google.firebase
uti
变量中的checkUser
方法中的部分
package com.android.pfe.other;
import android.support.annotation.Keep;
import android.util.Log;
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.IgnoreExtraProperties;
import com.google.firebase.database.ValueEventListener;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
/**
* Created by SADA INFO on 13/04/2018.
*/
@IgnoreExtraProperties
@Keep
public class User implements Serializable {
private static final String TAG ="UserClass" ;
public String username;
public String email;
public ArrayList<User> contact;
public String Uid;
public List article;
public DatabaseReference mDatabase;
public ArrayList<User> UserList;
public User uti;
public User() {
// Default constructor required for calls to DataSnapshot.getValue(com.android.pfe.other.User.class)
}
public User(String username, String email) {
this.username = username;
this.email = email;
}
public User(String username, String email,String uid) {
this.username = username;
this.email = email;
this.contact=new ArrayList<User>();
this.Uid=Uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void addUser(String UserId, String name, String email) {
mDatabase = FirebaseDatabase.getInstance().getReference("User");
User user = new User(name, email,UserId);
mDatabase.child(UserId).setValue(user);
}
public void addFriend(String UserId, final String email)
{
mDatabase = FirebaseDatabase.getInstance().getReference("User");
DatabaseReference user = mDatabase.child(UserId);
final DatabaseReference friendlist = user.child("contact");
checkUser(email, new ICheckUserListener() {
@Override
public void onSuccess(final User value) {
friendlist.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<User> list =(ArrayList<User>) dataSnapshot.getValue();
//this is where value is null
if(list==null&&value!=null)
{
list=new ArrayList<User>();
User user=new User(value.username,email);
list.add(user);
friendlist.setValue(list);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onError(Exception e) {
}
});
}
public void checkUser(String email, final ICheckUserListener listener) {
ValueEventListener mValueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// listener.onSuccess(dataSnapshot.exists() ? dataSnapshot : null);
//uti is always null
uti=dataSnapshot.getValue(User.class);
listener.onSuccess(uti);
if(uti==null) {
Log.w(TAG, "user pas trouvé");
}
// addFriend(uti.getEmail(),uti.getUsername());
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "loadUser:onCancelled", databaseError.toException());
listener.onError(databaseError.toException());
}
};
FirebaseDatabase
.getInstance()
.getReference("User")
.equalTo(email)
.addListenerForSingleValueEvent(mValueEventListener);
}
public void getFriends(String UserId){
mDatabase = FirebaseDatabase.getInstance().getReference("User");
DatabaseReference user = mDatabase.child(UserId);
final DatabaseReference friendlist = user.child("contact");
friendlist.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserList=(ArrayList)dataSnapshot.getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public ArrayList<User> getUserList() {
return UserList;
}
}
package com.android.pfe.other;
导入android.support.annotation.Keep;
导入android.util.Log;
导入android.widget.Toast;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ignoreextroperties;
导入com.google.firebase.database.ValueEventListener;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Hashtable;
导入java.util.List;
/**
*由SADA INFO于2018年4月13日创建。
*/
@忽略外部属性
@保持
公共类用户实现可序列化{
私有静态最终字符串TAG=“UserClass”;
公共字符串用户名;
公共字符串电子邮件;
公共ArrayList联系人;
公共字符串Uid;
公共物品清单;
公共数据库参考数据库;
公共ArrayList用户列表;
公共用户uti;
公共用户(){
//调用DataSnapshot.getValue(com.android.pfe.other.User.class)所需的默认构造函数
}
公共用户(字符串用户名、字符串电子邮件){
this.username=用户名;
this.email=电子邮件;
}
公共用户(字符串用户名、字符串电子邮件、字符串uid){
this.username=用户名;
this.email=电子邮件;
this.contact=new ArrayList();
this.Uid=Uid;
}
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
public void addUser(字符串UserId、字符串名称、字符串电子邮件){
mDatabase=FirebaseDatabase.getInstance().getReference(“用户”);
用户=新用户(名称、电子邮件、用户ID);
mDatabase.child(UserId).setValue(user);
}
public void addFriend(字符串用户ID,最终字符串电子邮件)
{
mDatabase=FirebaseDatabase.getInstance().getReference(“用户”);
DatabaseReference user=mDatabase.child(UserId);
最终数据库引用friendlist=user.child(“联系人”);
checkUser(电子邮件,新的ICheckUserListener(){
@凌驾
成功时公共无效(最终用户值){
addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
ArrayList=(ArrayList)dataSnapshot.getValue();
//这是值为null的位置
if(list==null&&value!=null)
{
列表=新的ArrayList();
用户=新用户(值、用户名、电子邮件);
列表。添加(用户);
设置值(列表);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
@凌驾
公共无效申报人(例外e){
}
});
}
public void checkUser(字符串电子邮件,最终ICheckUserListener侦听器){
ValueEventListener mValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
//onSuccess(dataSnapshot.exists()?dataSnapshot:null);
//uti总是空的
uti=dataSnapshot.getValue(User.class);
listener.onSuccess(uti);
如果(uti==null){
Log.w(标签,“用户密码”);
}
//addFriend(uti.getEmail(),uti.getUsername());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
w(标记“loadUser:onCancelled”,databaseError.toException());
onError(databaseError.toException());
}
};
FirebaseDatabase
.getInstance()
.getReference(“用户”)
.equalTo(电子邮件)
.addListenerForSingleValueEvent(mValueEventListener);
}
public void getFriends(字符串UserId){
mDatabase=FirebaseDatabase.getInstance().getReference(“用户”);
DatabaseReference user=mDatabase.child(UserId);
最终数据库引用friendlist=user.child(“联系人”);
addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
UserList=(ArrayList)dataSnapshot.getValue();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
公共ArrayList getUserList(){
返回用户列表;
}
}
要通过用户的电子邮件地址获取用户,您需要运行Firebase数据库查询
FirebaseDatabase
.getInstance()
.getReference("User")
.orderByChild("email")
.equalTo(email)
.addListenerForSingleValueEvent(mValueEventListener);
这会给你的听众带来正确的结果
但是您的onDataChange
也无法工作。您试图从快照中获取一个列表
,但它实际上是一个映射
,带有字符串键(EuEr…
,等等)和属性作为值。因此,您需要在回调中转换:
public void onDataChange(DataSnapshot dataSnapshot) {
UserList = new ArrayList<User>();
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
System.out.println(userSnapshot.getKey());
UserList.add(userSnapshot.getValue(User.class));
}
}
public void onDataChange(DataSnapshot DataSnapshot){
UserList=newarraylist();
对于(DataSnapshot userSnapshot:DataSnapshot.getChildren()){
System.out.println(userSnapshot.getKey());
添加(userSnapshot.getValue(User.class));
}
}
谢谢您的帮助