Firebase使用setValue传入Model类对象时存储数据格式异常
Firebase写入数据格式异常问题
请在将本问题标记为重复问题前先理解我的场景,我已在本站检索了一段时间,未找到对应解决方案。
我通过Fragment调用setValue(Model类对象)方法向Firebase写入数据,但数据并未按照预期格式存储。
相关实现代码
Fragment 部分代码
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(); } } }
实体类 部分代码
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; }}
存储结构对比
预期存储格式
按照Model类的字段定义,我原本希望对应用户UID节点下的数据结构为:
UID firstName : lastName : regNo : gender : campus : dept : program : semester : routeTitle : routeId:
实际存储结果
最终存入数据库的内容没有按照预期的Model字段格式组织,结构和设计要求存在偏差。
内容的提问来源于stack exchange,提问作者Muhammad Hanzilah
相关产品推荐
相关产品推荐

