Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决向Firebase数据库添加数据的问题_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何解决向Firebase数据库添加数据的问题

Java 如何解决向Firebase数据库添加数据的问题,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我是Firebase的新手,我正在尝试制作一个Android应用程序,用户可以通过创建活动跟踪训练,然后将活动存储在数据库(Firebase)中。但是,当我尝试将每个活动对象添加到数据库时,只插入了一些字段。请参阅下面的相关代码 活动课 public class Activity { private String workout, user, exercise, duration, weight, reps, date, activity_workout_user; Activ

我是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));

    }

}
添加活动类

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));

    }

}
公共类AddActivity扩展了AppCompative{
Firebase数据库;
数据库参考文献;
字符串user、workoutName、timeCreated;
旋转器;
EditText AArepsET、AAdurationET、aaWeighet;
text查看AAworkoutNameTV、AAerrorsTV、AAinfoTV;
按钮AAaddActivityBTN、AAsaveWorkoutBTN;
静态数组列表活动;
int totalActivities=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
database=FirebaseDatabase.getInstance();
ref=database.getReference();
SQLquery=“”;
活动=新的ArrayList();
Intent=getIntent();
user=intent.getStringExtra(“用户名”);
workoutName=intent.getStringExtra(“训练名称”);
timeCreated=DateTime.TimeDate();
AAworkoutNameTV=findviewbyd(R.id.AAworkoutNameTV);
AAerrorsTV=findviewbyd(R.id.AAerrorsTV);
AAinfoTV=findviewbyd(R.id.AAinfoTV);
AAexerciseSP=findviewbyd(R.id.AAexerciseSP);
AAaddActivityBTN=findViewById(R.id.AAaddActivityBTN);
AASAVEWORKUTBTN=findViewById(R.id.AASAVEWORKUTBTN);
AArepsET=findViewById(R.id.AArepsET);
AAdurationET=findViewById(R.id.AAdurationET);
aaweighet=findviewbyd(R.id.aaweighet);
AAworkoutNameTV.setText(String.format(“训练名称:%s”,workoutName));
//使用字符串数组和默认微调器布局创建ArrayAdapter
ArrayAdapter=ArrayAdapter.createFromResource(此,
R.array.exercise\u list,android.R.layout.simple\u微调器\u项);
//指定显示选项列表时要使用的布局
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
//将适配器应用于微调器
AAexerciseSP.setAdapter(适配器);
AAexerciseSP.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
String item=(String)parent.getSelectedItem();
String[]array=getResources().getStringArray(R.array.cardio_练习);
列表练习=数组。asList(数组);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
}
公共字符串selectedExercise(){
返回(字符串)AAexerciseSP.getSelectedItem();
}
公共void addActivity(视图){
String activityExercise=selectedExercise();
字符串activityUser=user;
字符串activityWorkout=workoutName;
字符串activityDuration=AAdurationET.getText().toString();
字符串activityReps=AArepsET.getText().toString();
字符串activityWeight=aaweighet.getText().toString();
字符串activityDate=DateTime.TimeDate();
活动=新活动(活动训练、活动用户、活动锻炼、,
activityDuration、activityWeight、activityReps、timeCreated);
活动。添加(活动);
总活动+=1;
}
公共void保存训练(视图){
用于(活动:活动){
String key=database.getReference(“活动”).push().getKey();
断言键!=null;
参考子项(“活动”)。子项(键)。设置值(活动);
}
锻炼锻炼=新锻炼(锻炼名称、用户、时间创建“);
String key=database.getReference(“训练”).push().getKey();
断言键!=null;
参考儿童(“训练”)。儿童(关键)。设定值(训练);
startActivity(新的意图(这个,HomePage.class));
}
}
将每个活动对象插入数据库是在“saveWorkout”方法中进行的,但不是插入类中的所有字段,而是只插入“activity\u-workout\u-user”和“user”字段。请参阅下面数据库中的代码片段

如果您能帮助您插入所有字段,我们将不胜感激

提前感谢,


干杯

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

post数据库结构for(活动:活动){String key=database.getReference(“活动”).push().getKey();assert key!=null;ref.child(“活动”).child(key).setValue(活动);}打印活动或记录响应首先检查其他字段是否为null。因为firebase不在数据库中存储空值,在此行
Activity Activity=new Activity(activityWorkout、activityUser、activityExercise、activityDuration、activityWeight、activityReps、timeCreated),是否确定其他值不为空?请同时回复@AlexMamo@AlexMamo是的,我确信它们不是空的。在完整的代码中,我使用if语句检查每个edittext是否有值,如果任何edittext没有值,程序将抛出错误消息并退出该方法。如果我执行类似于
ref.child(“活动”).child(key.chi)的操作,数据将正常插入