Error: com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.sam.simple.Project

Error: com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.sam.simple.Project

我试图存储用户信息,例如 NAME。但是我遇到了一些错误。搜索和应用方法,但出现错误,logCat 发布在下面。我可以得到解决方法吗?

我想添加一个名为 "USERS" 的新根目录和其下的用户信息,例如用户配置文件。

但现在我只想添加用户名。

下面是一些代码...

"MY CODE"

        firebaseAuth = FirebaseAuth.getInstance();
    firebaseDatabase = FirebaseDatabase.getInstance();
    databaseReference = firebaseDatabase.getReference();

    authStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {

                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
            } else {

                Log.d(TAG, "onAuthStateChanged:signed_out");
            }

        }
    };


    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String value = dataSnapshot.getValue(String.class);

            Log.d(TAG, "Value is: " + value);
        }

        @Override
        public void onCancelled(DatabaseError error) {

            Log.w(TAG, "Failed to read value.", error.toException());
        }
    });


    btn_save_edit_profile.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String user_name_string = user_name_edit.getText().toString();

            if (!user_name_string.equals("")){
                FirebaseUser user = firebaseAuth.getCurrentUser();
                String userID = user.getUid();

                databaseReference.child(userID).child("Name").setValue(user_name_string);
                Toast.makeText(ProfileEditActivity.this, "Saved Successfully!", Toast.LENGTH_SHORT).show();



            }
        }
    });

LOGCAT

Process: com.sam.simple, PID: 23912

                                       com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.sam.simple.Project
                                                                                    at com.google.android.gms.internal.adw.zzb(Unknown Source)
                                                                                    at com.google.android.gms.internal.adw.zza(Unknown Source)
                                                                                    at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                                                                                    at com.sam.simple.FirebaseHelper.fetchData(FirebaseHelper.java:52)
                                                                                    at com.sam.simple.FirebaseHelper.access[=11=]0(FirebaseHelper.java:14)
                                                                                    at com.sam.simple.FirebaseHelper.onChildAdded(FirebaseHelper.java:65)
                                                                                    at com.google.android.gms.internal.uv.zza(Unknown Source)
                                                                                    at com.google.android.gms.internal.aaf.zzIo(Unknown Source)
                                                                                    at com.google.android.gms.internal.aal.run(Unknown Source)
                                                                                    at android.os.Handler.handleCallback(Handler.java:739)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                    at android.os.Looper.loop(Looper.java:145)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:6918)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

需要输出

注意:是否因为我的 "Project" root 导致了任何问题?数据库可能指向主根之类的东西?我是新来的。有帮助吗?谢谢

更新#1:添加了我的项目的下一个数据快照,如果这可以进一步帮助?

DatabaseReference db;
Boolean saved = null;
ArrayList<Project> projects=new ArrayList<>();

public FirebaseHelper(DatabaseReference db) {
    this.db = db;
}

//WRITE IF NOT NULL
public Boolean save(Project project)
{
    if(project==null)
    {
        saved=false;
    }
    else
    {
        try
        {
            db.child("Project").push().setValue(project);
            saved=true;

        }catch (DatabaseException e)
        {
            e.printStackTrace();
            saved=false;
        }
    }
    return saved;
}

//IMPLEMENT FETCH DATA AND FILL ARRAYLIST
private void fetchData(DataSnapshot dataSnapshot)
{
    projects.clear();
    for (DataSnapshot ds : dataSnapshot.getChildren())
    {
        Project project = ds.getValue(Project.class);
       projects.add(project);
    }
}

//READ THEN RETURN ARRAYLIST
public ArrayList<Project> retrieve() {

    /*Query queryreference = db.orderByChild("postedDate");*/
    /*Query lastToFirstQuery = db.orderByChild("postedDate");*/

    db.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            fetchData(dataSnapshot);

        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            fetchData(dataSnapshot);
        }
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

    return projects;

作为一个相对较新的用户无法发表评论,但我最近也遇到了同样的问题。 尝试将此行 databaseReference.child(userID).child("Name").setValue(user_name_string); 更改为 databaseReference.child("Users").child(userID).child("Name").setValue(user_name_string);

您的数据库引用引用了整个数据库,因此添加 .child("Users") 会将其缩小到您要添加到的特定节点。 还要确保您的用户 class 与您的 Firebase 节点完美匹配。

请使用此代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("Users");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("Name").getValue(String.class);
            Log.d("TAG", name);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);

当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。 即使只有一个结果,快照也会包含一个结果的列表。