【问题标题】:How to add Value child in child in Firebase?如何在 Firebase 中的子项中添加值子项?
【发布时间】:2021-05-17 02:25:48
【问题描述】:

主文件

大家好,我要做这样的事情,如下图所示——

但我不知道该怎么做!!,问题是该文件不是那么清楚易懂 需要有人帮助我...

UserSongUploadDetails user_song_upload_details = new UserSongUploadDetails(user_uid,song_artist_name_field_string,
                                            song_artist_name_field_string,
                                            song_description_field_string,
                                            date_time_formatter,
                                            song_firebase_url);

    firebaseDatabase = FirebaseDatabase.getInstance();
    user_song_database_refrence = firebaseDatabase.getReference("Users");
user_song_database_refrence.child(FirebaseAuth.getInstance().getUid()).setValue(user_song_upload_details);

Users.java 文件

如您所见,将所有这些值放入 setValue()。

public class UserSongUploadDetails {
    private String user_id;
    private String song_name;
    private String song_artist;
    private String song_description;
    private String song_upload_time_stamp;
    private Uri song_storage_url;

    UserSongUploadDetails(){

    }

    UserSongUploadDetails(String user_id, String song_name, String song_artist, String song_description, String song_upload_time_stamp, Uri song_storage_url){
        this.user_id = user_id;
        this.song_name = song_name;
        this.song_artist = song_artist;
        this.song_description = song_description;
        this.song_upload_time_stamp = song_upload_time_stamp;
        this.song_storage_url = song_storage_url;
    }

    public String getUser_id(){
        return user_id;
    }

    public String getSong_name(){
        return song_name;
    }

    public String getSong_artist(){
        return song_artist;
    }

    public String getSong_description(){
        return song_description;
    }

    
    public String getSong_upload_time_stamp(){
        return song_upload_time_stamp;
    }

    public Uri getSong_storage_url() {
        return song_storage_url;
    }

错误

at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(CustomClassMapper.java:48)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(CustomClassMapper.java:676)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:168)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(CustomClassMapper.java:48)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(CustomClassMapper.java:676)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:168)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(CustomClassMapper.java:48)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(CustomClassMapper.java:676)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:168)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(CustomClassMapper.java:48)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(CustomClassMapper.java:676)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:168)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(CustomClassMapper.java:48)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(CustomClassMapper.java:676)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:168)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.access$200(CustomClassMapper.java:48)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.serialize(CustomClassMapper.java:676)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(CustomClassMapper.java:168)

【问题讨论】:

    标签: java firebase android-studio firebase-realtime-database firebase-authentication


    【解决方案1】:

    1.将类结构与数据库结构匹配

    您需要匹配自定义 Java 类和数据库结构之间的结构。在您的情况下,Java 类结构如下:

    public class User implements Serializable {
        private String name;
        private String email_id;
        private AudioUpload audio_upload;
        
        public class AudioUpload implements Serializable {
            private String song_artist;
            private String song_genre;
            private String song_name;
            private String song_url;
    
            public AudioUpload(String song_artist, String song_genre, String song_name, String song_url) {
                this.song_artist = song_artist;
                this.song_genre = song_genre;
                this.song_name = song_name;
                this.song_url = song_url;
            }
    
            public String getSong_artist() {
                return song_artist;
            }
    
            public void setSong_artist(String song_artist) {
                this.song_artist = song_artist;
            }
    
            public String getSong_genre() {
                return song_genre;
            }
    
            public void setSong_genre(String song_genre) {
                this.song_genre = song_genre;
            }
    
            public String getSong_name() {
                return song_name;
            }
    
            public void setSong_name(String song_name) {
                this.song_name = song_name;
            }
    
            public String getSong_url() {
                return song_url;
            }
    
            public void setSong_url(String song_url) {
                this.song_url = song_url;
            }
        }
    
        public User(String name, String email_id, AudioUpload audio_upload) {
            this.name = name;
            this.email_id = email_id;
            this.audio_upload = audio_upload;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getEmail_id() {
            return email_id;
        }
    
        public void setEmail_id(String email_id) {
            this.email_id = email_id;
        }
    
        public AudioUpload getAudio_upload() {
            return audio_upload;
        }
    
        public void setAudio_upload(AudioUpload audio_upload) {
            this.audio_upload = audio_upload;
        }
    }
    

    为了将对象传递给setValue(),您的自定义类必须实现Serializable。不要忘记添加 SetterGetter 方法,因为 serialize deserialize 过程将使用它来构造您的对象。这里重要的是序列化过程只关心你的 Setter 方法。所以,即使你没有指定一个变量作为类成员,只要有Setter方法存在,那些带有Setter 方法返回类型将在您的数据库中创建。此外,您需要将 SetterGetter 方法的名称与您的数据库字段名称相匹配。 p>

    2。为字段设置值

    要为字段设置值,您只需要执行以下操作:

    User userObject = new User();
    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    FirebaseDatabase.getInstance().getReference("users").child(uid).setValue(userObject);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多