Reputation: 31
Hello guys, I've to do something like this, as shown in the picture below -
but I don't know how to do this!!, And the thing is that document is not that clear to understand and need someone to help me ...
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);
putting all these values to setValue(), as you can see.
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)
Upvotes: 0
Views: 374
Reputation: 656
1. Match the class structure to the database structure
You need to match the structure between your custom Java Class and Database Structure. In your case, the Java Class structure is as follows:
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;
}
}
In order to pass object to setValue()
, your custom class must implements Serializable
. Don't forget to add the Setter and Getter method, since the serialize and deserialize procedure will use it to construct your object. The important thing here is that the serialization procedure only care to your Setter method. So, even if you don't specify a variable as a class member, as long as there is Setter method exist, those variable with Setter method return type will be created in your database. And also, you need to match the name of Setter and Getter method to your database field name.
2. Set Value to Field
To set value to field, you only need to do the following:
User userObject = new User();
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseDatabase.getInstance().getReference("users").child(uid).setValue(userObject);
Upvotes: 1