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));
}
}
谢谢您的帮助