繁体   English   中英

将日期和时间存储到 Firebase 在 Android 工作室的用户子下?

[英]Store a date&time into Firebase under a User child in Android studio?

这是我的 Firebase 结构:

Firebase 结构

我想在每个用户的第二个名称下方的“预订”下存储一个日期和时间,然后选择日期和时间。

这是我到目前为止以错误的方式工作的内容。 它在名为“ MyBookings ”的单独子节点下设置日期

基本上我正在做的是单击显示日期和时间选择器的 EditText,我需要将该日期存储在 Firebase 实时数据库中。

private void showDateTimeDialog(final EditText date_time_in) {
    final Calendar calendar=Calendar.getInstance();
    DatePickerDialog.OnDateSetListener dateSetListener=new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            calendar.set(Calendar.YEAR,year);
            calendar.set(Calendar.MONTH,month+1);
            calendar.set(Calendar.DAY_OF_MONTH,dayOfMonth);

            TimePickerDialog.OnTimeSetListener timeSetListener=new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
                    calendar.set(Calendar.MINUTE,minute);

                    SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yy-MM-dd HH:mm");

                    date_time_in.setText(simpleDateFormat.format(calendar.getTime()));
                    Bookings booking = new Bookings(year,month,dayOfMonth,hourOfDay,minute);
                    rootDatabaseRef.setValue(booking);
                }
            };

            new TimePickerDialog(BookingActivity.this,timeSetListener,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),false).show();

        }

    };

    new DatePickerDialog(BookingActivity.this,dateSetListener,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();

}

这是我的 Firebase 参考资料,我知道它是错误的,但不知道如何写它是正确的。

DatabaseReference rootDatabaseRef;
rootDatabaseRef = FirebaseDatabase.getInstance().getReference().child("MyBookings");

这是我的 POJO 预订 class。

public int year,month,dayOfMonth,hourOfDay,minute;

public Bookings(){

}

    public Bookings(int year, int month, int dayOfMonth, int hourOfDay, int minute) {
        this.year = year;
        this.month = month;
        this.dayOfMonth = dayOfMonth;
        this.hourOfDay = hourOfDay;
        this.minute = minute;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDayOfMonth() {
        return dayOfMonth;
    }

    public void setDayOfMonth(int dayOfMonth) {
        this.dayOfMonth = dayOfMonth;
    }

    public int getHourOfDay() {
        return hourOfDay;
    }

    public void setHourOfDay(int hourOfDay) {
        this.hourOfDay = hourOfDay;
    }

    public int getMinute() {
        return minute;
    }

    public void setMinute(int minute) {
        this.minute = minute;
    }
} ```

setValue() 方法的当前结果。

MyBookings
dayOfMonth: 
6
hourOfDay: 
13
minute: 
49
month: 
0
year: 
2022

如何在 Firebase 中的用户(仅当前登录用户)下正确存储日期+时间?

改变这个:

DatabaseReference rootDatabaseRef;
rootDatabaseRef = FirebaseDatabase.getInstance().getReference().child("MyBookings");

对此:

DatabaseReference rootDatabaseRef;
rootDatabaseRef = FirebaseDatabase.getInstance().getReference().child("MyBookings").child(username).child("Bookings");

其中username是包含当前用户的用户名的字符串。

改进:为预订保留一个计数器.. 让我们说nBooks现在,像这样进行引用...child(username).child("Booking"+ nBooks )

您正在使用FirebaseDatabase.getInstance().getReference().child("MyBookings").child(username);初始化rootDatabseRef

但是如果你想在你的 UID 的单独节点下添加它,你需要以这种方式初始化

String username = ""/*This where you set you currently logged user's did*/;
DatabaseReference rootDatabaseRef;
rootDatabaseRef = FirebaseDatabase.getInstance().getReference().child("MyBookings").child(username).child(UUID.randomUUID().toString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM