首页 > 解决方案 > 如何解决将数据添加到 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”字段。请参阅下面的数据库片段。

任何帮助插入所有字段将不胜感激。

提前致谢,

干杯

标签: javaandroidfirebasefirebase-realtime-database

解决方案


我想发表评论,但我对 stackoverflow 很陌生,所以我还不能发表评论。我最近才开始自己使用 Firebase,但我没有学会 100% 正确使用它。但是我读到,在向数据库添加自定义对象时,对象应该有一个额外的不带参数的构造函数,并且每个变量都应该有 getter 和 setter。


推荐阅读