Please understand my scenario before marking it as a duplicate. I've searched for a while but didn't find the answer on the site.
I am sending data to Firebase through a fragment using setValue(Modelclass object) but the data is not stored in the format as it was supposed to be.
Fragment.java
public class FragmentSelectRoute extends Fragment {
RadioGroup radioGroup;
private int routeId;
private String routeTitle;
Button btnFinish;
// Firebase
FirebaseDatabase database;
DatabaseReference studentRef;
// FirebaseAUth
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
public FragmentSelectRoute() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_select_route, container, false);
database = FirebaseDatabase.getInstance();
studentRef = database.getReference(Common.STUDENT_REFERENCE);
radioGroup = view.findViewById(R.id.radio_select_route);
btnFinish = view.findViewById(R.id.btn_finish);
Bundle bundle = this.getArguments();
String firstName = bundle.getString("firstName");
String lastName = bundle.getString("lastName");
String regNo = bundle.getString("regNo");
String gender = bundle.getString("gender");
String campus = bundle.getString("campus");
String dept = bundle.getString("dept");
String program = bundle.getString("program");
String semester = bundle.getString("semester");
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i) {
case R.id.rdbtn_route_one:
routeId = 1;
routeTitle = "Lari Adda";
break;
case R.id.rdbtn_route_two:
routeId = 2;
routeTitle = "Rehman Plaza";
break;
case R.id.rdbtn_route_three:
routeId = 3;
routeTitle = "Aziz Bhatti Town";
break;
case R.id.rdbtn_route_four:
routeId = 4;
routeTitle = "Gill Wala";
break;
case R.id.rdbtn_route_five:
routeId = 5;
routeTitle = "Mela Mandi Ground";
break;
case R.id.rdbtn_route_six:
routeId = 6;
routeTitle = "Bhera";
break;
case R.id.rdbtn_route_seven:
routeId = 7;
routeTitle = "Jahurabad";
break;
case R.id.rdbtn_route_eight:
routeId = 8;
routeTitle = "Nihang";
break;
case R.id.rdbtn_route_nine:
routeId = 9;
routeTitle = "Farooka";
break;
case R.id.rdbtn_route_ten:
routeId = 10;
routeTitle = "Silanwali";
break;
case R.id.rdbtn_route_eleven:
routeId = 11;
routeTitle = "Chiniot";
break;
case R.id.rdbtn_route_twelve:
routeId = 12;
routeTitle = "Laliyan";
break;
case R.id.rdbtn_route_thirteen:
routeId = 13;
routeTitle = "Kandiwal";
break;
case R.id.rdbtn_route_fourteen:
routeId = 14;
routeTitle = "No Title";
break;
case R.id.rdbtn_route_fifteen:
routeId = 15;
routeTitle = "No Title";
break;
case R.id.rdbtn_route_sixteen:
routeId = 16;
routeTitle = "Alfarid Garden";
break;
}
}
});
btnFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
registerUserToFirebase(firstName, lastName, regNo, gender, campus, dept
, program, semester, routeId, routeTitle);
}
});
return view;
}
private void registerUserToFirebase(String firstName, String lastName, String regNo,
String gender, String campus, String dept, String program,
String semester, int routeId, String routeTitle) {
StudentModel studentModel = new StudentModel();
studentModel.setFirstName(firstName);
studentModel.setLastName(lastName);
studentModel.setRegNo(regNo);
studentModel.setGender(gender);
studentModel.setCampus(campus);
studentModel.setDept(dept);
studentModel.setProgram(program);
studentModel.setSemester(semester);
studentModel.setRouteId(routeId);
studentModel.setRouteTitle(routeTitle);
if (FirebaseAuth.getInstance().getCurrentUser() != null){
studentRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(studentModel)
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), "could not send data"
+ e.getMessage(), Toast.LENGTH_SHORT).show();
}
}).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getActivity(), "Registarion Successfull", Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(getActivity(), "User is null", Toast.LENGTH_SHORT).show();
}
} }
StudentModel.java
public class StudentModel {
private String firstName;
private String lastName;
private String regNo;
private String gender;
private String campus;
private String dept;
private String program;
private String semester;
public String getRouteTitle() {
return routeTitle;
}
public void setRouteTitle(String routeTitle) {
this.routeTitle = routeTitle;
}
private String routeTitle;
private int routeId;
public StudentModel() {
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getRegNo() {
return regNo;
}
public void setRegNo(String regNo) {
this.regNo = regNo;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getCampus() {
return campus;
}
public void setCampus(String campus) {
this.campus = campus;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getProgram() {
return program;
}
public void setProgram(String program) {
this.program = program;
}
public String getSemester() {
return semester;
}
public void setSemester(String semester) {
this.semester = semester;
}
public int getRouteId() {
return routeId;
}
public void setRouteId(int routeId) {
this.routeId = routeId;
}}
Data should be stored as in model class as:
UID
firstName :
lastName :
regNo :
gender :
campus :
dept :
program :
semester :
routeTitle :
routeId:
Rather, it is stored as:

It doesn't matter the order of the fields in your "StudentModel" class, because when you are adding a new instance of the class to the Firebase Realtime Database, all the fields are automatically ordered alphabetically. Besides that, the order of calling the setters on your "studentModel" object, doesn't matter too. The Firebase Console, always orders the fields alphabetically. See, the field starts with the letter "c", the second one with "d", and so on till the end, where the last field starts with "s". Unfortunately, this order cannot be changed in the Firebase Console. If you want, you can change the order in your class to be alphabetical and match the order in the database, that's fine, but it doesn't make any sense in my opinion.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With