java - 如何解决将数据添加到 Firebase 数据库的问题
问题描述
我是 Firebase 的新手,我正在尝试制作一个 Android 应用程序,用户可以在其中通过创建活动来跟踪锻炼,然后将活动存储在数据库 (Firebase) 中。但是,当我尝试将每个活动对象添加到数据库时,只插入了一些字段。请看下面的相关代码
活动课
public class Activity {
private String workout, user, exercise, duration, weight, reps, date, activity_workout_user;
Activity(String workout, String user, String exercise, String duration, String weight, String reps, String date) {
this.workout = workout;
this.user = user;
this.exercise = exercise;
this.duration = duration;
this.weight = weight;
this.reps = reps;
this.date = date;
this.activity_workout_user = exercise + "_" + workout + "_" + user;
}
//getters and setters
}
添加活动类
public class AddActivity extends AppCompatActivity {
FirebaseDatabase database;
DatabaseReference ref;
String user, workoutName, timeCreated;
Spinner AAexerciseSP;
EditText AArepsET, AAdurationET, AAweightET;
TextView AAworkoutNameTV, AAerrorsTV, AAinfoTV;
Button AAaddActivityBTN, AAsaveWorkoutBTN;
static ArrayList<Activity> activities;
int totalActivities = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
database = FirebaseDatabase.getInstance();
ref = database.getReference();
SQLquery = "";
activities = new ArrayList<>();
Intent intent = getIntent();
user = intent.getStringExtra("username");
workoutName = intent.getStringExtra("workout_name");
timeCreated = DateTime.TimeDate();
AAworkoutNameTV = findViewById(R.id.AAworkoutNameTV);
AAerrorsTV = findViewById(R.id.AAerrorsTV);
AAinfoTV = findViewById(R.id.AAinfoTV);
AAexerciseSP = findViewById(R.id.AAexerciseSP);
AAaddActivityBTN = findViewById(R.id.AAaddActivityBTN);
AAsaveWorkoutBTN = findViewById(R.id.AAsaveWorkoutBTN);
AArepsET = findViewById(R.id.AArepsET);
AAdurationET = findViewById(R.id.AAdurationET);
AAweightET = findViewById(R.id.AAweightET);
AAworkoutNameTV.setText(String.format("Workout name: %s", workoutName));
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.exercise_list, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
AAexerciseSP.setAdapter(adapter);
AAexerciseSP.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String item = (String) parent.getSelectedItem();
String[] array = getResources().getStringArray(R.array.cardio_exercises);
List<String> exercises = Arrays.asList(array);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public String selectedExercise(){
return (String) AAexerciseSP.getSelectedItem();
}
public void addActivity(View view){
String activityExercise = selectedExercise();
String activityUser = user;
String activityWorkout = workoutName;
String activityDuration = AAdurationET.getText().toString();
String activityReps = AArepsET.getText().toString();
String activityWeight = AAweightET.getText().toString();
String activityDate = DateTime.TimeDate();
Activity activity = new Activity(activityWorkout, activityUser, activityExercise,
activityDuration, activityWeight, activityReps, timeCreated);
activities.add(activity);
totalActivities += 1;
}
public void saveWorkout(View view){
for (Activity activity:activities){
String key = database.getReference("activities").push().getKey();
assert key != null;
ref.child("activities").child(key).setValue(activity);
}
Workout workout = new Workout(workoutName,user,timeCreated,"");
String key = database.getReference("workouts").push().getKey();
assert key != null;
ref.child("workouts").child(key).setValue(workout);
startActivity(new Intent(this, HomePage.class));
}
}
每个活动对象到数据库的插入发生在“saveWorkout”方法中,但不是插入类中的所有字段,而是仅插入“activity_workout_user”和“user”字段。请参阅下面的数据库片段。
任何帮助插入所有字段将不胜感激。
提前致谢,
干杯
解决方案
我想发表评论,但我对 stackoverflow 很陌生,所以我还不能发表评论。我最近才开始自己使用 Firebase,但我没有学会 100% 正确使用它。但是我读到,在向数据库添加自定义对象时,对象应该有一个额外的不带参数的构造函数,并且每个变量都应该有 getter 和 setter。
推荐阅读
- haskell - Is the streaming package's Stream data type equivalent to FreeT?
- spring - Spring Boot csrf 使用
- java - 如何将谷歌业务搜索添加到 Android 应用程序。新程序员
- autodesk-forge - Translate a model after load (move origin)
- ios - What's the difference between operation and block in NSOperation?
- java - 使用 Java Apache POI 删除工作表后 Excel 在保护模式下打开
- php - 将变量(数组)分配给其他变量不会从源变量中获取副本
- angularjs - attempting to navigate a user to login if cookie is undefined
- javascript - Would like to understand why this "setInterval" in my code isnt working?
- android - 从同一个项目安装多个版本的 apk