Java 尝试获取当前用户信息时出错

Java 尝试获取当前用户信息时出错,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,com.google.firebase.database.DatabaseException:无法转换对象 类型为java.lang.String的 com.example.亚伦.inthehole.UserInformation 为什么我的代码会出现这个错误?我试图通过使用每个人的UID从firebase获取特定的用户信息。当我运行代码时,会出现这个错误 private FirebaseDatabase mFirebaseDatabase; private FirebaseAuth mAuth

com.google.firebase.database.DatabaseException:无法转换对象 类型为java.lang.String的 com.example.亚伦.inthehole.UserInformation

为什么我的代码会出现这个错误?我试图通过使用每个人的UID从firebase获取特定的用户信息。当我运行代码时,会出现这个错误

private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private  String userID;
private FirebaseUser mCurrentUser;
private DatabaseReference mDatabaseUsers;


private ListView mListView;

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

    mListView = (ListView) findViewById(R.id.listview);

    //declare the database reference object. This is what we use to access the database.
    //NOTE: Unless you are signed in, this will not be useable.
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mCurrentUser = mAuth.getCurrentUser();
    mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users").child(mCurrentUser.getUid());


    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                // User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
            } else {
                // User is signed out
                Log.d(TAG, "onAuthStateChanged:signed_out");
                toastMessage("Successfully signed out.");
            }
            // ...
        }
    };

    mDatabaseUsers.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            showData(dataSnapshot);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

/*private void showData(DataSnapshot dataSnapshot) {
    for(DataSnapshot ds : dataSnapshot.getChildren()){
        UserInformation uInfo = new UserInformation();
        uInfo.setName(ds.child(userID).getValue(UserInformation.class).getName()); //set the name
        uInfo.setHandicap(ds.child(userID).getValue(UserInformation.class).getHandicap()); //set the name
        uInfo.setAge(ds.child(userID).getValue(UserInformation.class).getAge()); //set the email
        uInfo.setGender(ds.child(userID).getValue(UserInformation.class).getGender()); //set the phone_num

        //display all the information
        Log.d(TAG, "showData: name: " + uInfo.getName());
        Log.d(TAG, "showData: age: " + uInfo.getAge());
        Log.d(TAG, "showData: handicap: " + uInfo.getHandicap());
        Log.d(TAG, "showData: gender: " + uInfo.getGender());

        ArrayList<String> array  = new ArrayList<>();
        array.add("Full Name:");
        array.add(uInfo.getName());
        array.add("Age:");
        array.add(uInfo.getAge());
        array.add("Handicap:");
        array.add(uInfo.getHandicap());
        array.add("Gender:");
        array.add(uInfo.getGender());
        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
        mListView.setAdapter(adapter);
    }
}
*/
private void showData(DataSnapshot dataSnapshot) {
    ArrayList<String> array  = new ArrayList<>();
    for(DataSnapshot ds : dataSnapshot.getChildren()){
        UserInformation uInfo = ds.getValue(UserInformation.class);
        array.add(" Full Name : " +uInfo.getName());
        array.add(" Age : " + uInfo.getAge());
        array.add(" Handicap: " + uInfo.getHandicap());
        array.add(" Gender: " + uInfo.getGender());


    }
    ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
    mListView.setAdapter(adapter);
}

@Override
public void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}


/**
 * customizable toast
 * @param message
 */
private void toastMessage(String message){
    Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
私有FirebaseDatabase mFirebaseDatabase;
私人消防队;
私有FirebaseAuth.AuthStateListener mAuthListener;
私有字符串用户标识;
私有FirebaseUser mCurrentUser;
私有数据库引用mDatabaseUsers;
私有列表视图;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u view\u数据库);
mListView=(ListView)findViewById(R.id.ListView);
//声明数据库引用对象。这是我们用来访问数据库的。
//注意:除非您已登录,否则此选项将不可用。
mFirebaseDatabase=FirebaseDatabase.getInstance();
mCurrentUser=mAuth.getCurrentUser();
mDatabaseUsers=FirebaseDatabase.getInstance().getReference().child(“用户”).child(mCurrentUser.getUid());
mAuthListener=new FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
FirebaseUser=firebaseAuth.getCurrentUser();
如果(用户!=null){
//用户已登录
Log.d(标记为“+user.getUid()”);
}否则{
//用户已注销
Log.d(标记“onAuthStateChanged:signed_out”);
toastMessage(“已成功注销”);
}
// ...
}
};
mDatabaseUsers.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
//使用初始值调用此方法一次,然后再次调用
//每当更新此位置的数据时。
showData(dataSnapshot);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
/*私有void showData(DataSnapshot DataSnapshot){
对于(DataSnapshot ds:DataSnapshot.getChildren()){
UserInformation uInfo=新的UserInformation();
uInfo.setName(ds.child(userID).getValue(UserInformation.class).getName());//设置名称
uInfo.setDisability(ds.child(userID).getValue(UserInformation.class).getDisability());//设置名称
uInfo.setAge(ds.child(userID).getValue(UserInformation.class.getAge());//设置电子邮件
uInfo.setGender(ds.child(userID).getValue(UserInformation.class.getGender());//设置电话号码
//显示所有信息
d(标记“showData:name:+uInfo.getName());
d(标记“showData:age:+uInfo.getAge());
Log.d(标记“showData:disability:+uInfo.getdisability());
Log.d(标记“showData:gender:+uInfo.getGender());
ArrayList数组=新的ArrayList();
add(“全名:”);
add(uInfo.getName());
数组。添加(“年龄:”;
add(uInfo.getAge());
数组。添加(“障碍:”);
add(uInfo.getDisability());
数组。添加(“性别:”;
add(uInfo.getGender());
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,数组);
mListView.setAdapter(适配器);
}
}
*/
私有void showData(DataSnapshot DataSnapshot){
ArrayList数组=新的ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
UserInformation uInfo=ds.getValue(UserInformation.class);
add(“全名:+uInfo.getName());
add(“Age:+uInfo.getAge());
add(“disability:+uInfo.getdisability());
add(“性别:+uInfo.getGender());
}
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,数组);
mListView.setAdapter(适配器);
}
@凌驾
public void onStart(){
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@凌驾
公共void onStop(){
super.onStop();
if(mAuthListener!=null){
removeAuthStateListener(mAuthListener);
}
}
/**
*定制吐司
*@param消息
*/
专用无效toastMessage(字符串消息){
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
}
}更改此选项:

private void showData(DataSnapshot dataSnapshot) {
ArrayList<String> array  = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()){
    UserInformation uInfo = ds.getValue(UserInformation.class);
    array.add(" Full Name : " +uInfo.getName());
    array.add(" Age : " + uInfo.getAge());
    array.add(" Handicap: " + uInfo.getHandicap());
    array.add(" Gender: " + uInfo.getGender());
  }
}
private void showData(DataSnapshot DataSnapshot){
ArrayList数组=新的ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
UserInformation uInfo=ds.getValue(UserInformation.class);
add(“全名:+uInfo.getName());
add(“Age:+uInfo.getAge());
add(“disability:+uInfo.getdisability());
add(“性别:+uInfo.getGender());
}
}
为此:

private void showData(DataSnapshot dataSnapshot) {
ArrayList<String> array  = new ArrayList<>();
    UserInformation uInfo = ds.getValue(UserInformation.class);
    array.add(" Full Name : " +uInfo.getName());
    array.add(" Age : " + uInfo.getAge());
    array.add(" Handicap: " + uInfo.getHandicap());
    array.add(" Gender: " + uInfo.getGender());

}
private void showData(DataSnapshot DataSnapshot){
ArrayList数组=新的ArrayList();
UserInformation uInfo=ds.getValue(UserInformation.class);
add(“全名:+uInfo.getName());
add(“Age:+uInfo.getAge());
add(“disability:+uInfo.getdisability());
add(“性别:+uInfo.getGender());
}

删除循环的
,因为它在属性内部迭代,并将返回一个字符串。

如果删除该行(DataSnapshot ds:DataSnapshot.getChildren(),“ds”use
UserInformation uInfo=DataSnapshot.getValue(UserInformation.class)将发生错误
@AaronNicholl
R.layout。简单列表项1
只包含一个
TextView
。正如我在代码中看到的,您需要4个文本视图才能显示
name
age
disability
gender
的值。因此,在ArrayList中添加所有这些字符串根本无法解决问题好吧,你是怎么想的