如图所示,我的列表未按日期和时间排序
添加Appointment.java - >这就是我将我的数据添加到firebase的方式
public class AddAppointment extends AppCompatActivity {
private FirebaseAuth firebaseAuth;
private FirebaseUser mCurrentUser;
private EditText dateApp,timeApp,nameTxt,addressTxt,telTxt;
int mYear,mMonth,mDay,mHour,mMinute;
private Button saveBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_appointment);
Firebase.setAndroidContext(this);
nameTxt = (EditText) findViewById(R.id.nameText);
addressTxt= (EditText) findViewById(R.id.addressText);
telTxt = (EditText) findViewById(R.id.telText);
dateApp = (EditText)findViewById(R.id.dateAppointment);
timeApp = (EditText)findViewById(R.id.timeAppointment);
dateApp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
datePic();
}
});
timeApp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timePic();
}
});
saveBtn = (Button)findViewById(R.id.saveBtn);
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
firebaseAuth = FirebaseAuth.getInstance();
mCurrentUser = firebaseAuth.getCurrentUser();
DatabaseReference db= FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").push();
String name = nameTxt.getText().toString().trim();
String address = addressTxt.getText().toString().trim();
String tel = telTxt.getText().toString().trim();
String date = dateApp.getText().toString().trim();
String time = timeApp.getText().toString().trim();
//Adding values
db.child("name").setValue(name);
db.child("address").setValue(address);
db.child("tel").setValue(tel);
db.child("date").setValue(date);
db.child("time").setValue(time);
//Storing values to firebase
Toast.makeText(AddAppointment.this,"Saved",Toast.LENGTH_SHORT).show();
Intent mainIntent = new Intent(AddAppointment.this,MainActivity.class);
startActivity(mainIntent);
}
});
}
public void datePic()
{
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(this,new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){
mYear = year;
mMonth = monthOfYear+1;
mDay = dayOfMonth;
dateApp.setText((mDay+"-"+mMonth+"-"+mYear));
}
},mDay,mMonth,mYear);
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
datePickerDialog.show();
}
public void timePic()
{
final Calendar c = Calendar.getInstance();
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(this,new TimePickerDialog.OnTimeSetListener(){
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute){
int hour = hourOfDay % 12;
timeApp.setText(String.format("%02d:%02d %s", hour == 0 ? 12 : hour,
minute, hourOfDay < 12 ? "a.m." : "p.m."));
}
},mHour,mMinute,false);
timePickerDialog.show();
}
}
AppointmentData.java - &gt;这是我的数据设置
public class AppointmentData {
private String name,tel,address,time,date;
public AppointmentData() {
}
public void setName(String name) {
this.name = name;
}
public void setTel(String tel) {
this.tel = tel;
}
public void setAddress(String address) {
this.address = address;
}
public void setTime(String time) {
this.time = time;
}
public void setDate(String date) {
this.date = date;
}
public AppointmentData(String name, String tel, String address, String time, String date) {
this.name=name;
this.tel=tel;
this.address=address;
this.time=time;
this.date=date;
}
public String getName() {
return name;
}
public String getTel() {
return tel;
}
public String getAddress() {
return address;
}
public String getDate() {
return date;
}
public String getTime() {
return time;
}
}
ViewAppointment.java - &gt;这是我显示我的recyclerview
的方式
public class ViewAppointment extends AppCompatActivity {
private FirebaseAuth firebaseAuth;
private FirebaseUser mCurrentUser;
private DatabaseReference db;
private RecyclerView recyclerView;
private FirebaseRecyclerAdapter<AppointmentData,myViewHolder> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_appointment);
recyclerView=(RecyclerView)findViewById(R.id.recycle);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
firebaseAuth = FirebaseAuth.getInstance();
mCurrentUser = firebaseAuth.getCurrentUser();
db= FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment");
db.keepSynced(true);
mAdapter= new FirebaseRecyclerAdapter<AppointmentData, myViewHolder>(
AppointmentData.class,R.layout.model,myViewHolder.class,db
) {
@Override
protected void populateViewHolder(final myViewHolder viewHolder, final AppointmentData model, final int position) {
viewHolder.nameTxt.setText(model.getName());
viewHolder.dateApp.setText(model.getDate());
viewHolder.timeApp.setText(model.getTime());
viewHolder.mapBtn.setText("Map");
viewHolder.detailBtn.setText("Detail");
viewHolder.deleteBtn.setText("Delete");
viewHolder.editBtn.setText("Edit");
Log.e("myFirebase UID", mAdapter.getRef(position).getKey());
viewHolder.editBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent (view.getContext(), UpdateAppointment.class);
i.putExtra("NAME_KEY",model.getName());
i.putExtra("ADDRESS_KEY",model.getAddress());
i.putExtra("TEL_KEY",model.getTel());
i.putExtra("DATE_KEY",model.getDate());
i.putExtra("TIME_KEY",model.getTime());
view.getContext().startActivity(i);
Log.e("Item Click position",""+position);
mAdapter.getRef(+position).removeValue();
}
});
viewHolder.detailBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent (view.getContext(), DetailActivity.class);
i.putExtra("NAME_KEY",model.getName());
i.putExtra("ADDRESS_KEY",model.getAddress());
i.putExtra("TEL_KEY",model.getTel());
i.putExtra("DATE_KEY",model.getDate());
i.putExtra("TIME_KEY",model.getTime());
view.getContext().startActivity(i);
}
});
viewHolder.mapBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent (view.getContext(), Distance.class);
i.putExtra("ADDRESS_KEY",model.getAddress());
view.getContext().startActivity(i);
}
});
viewHolder.deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("Item Click position",""+position);
mAdapter.getRef(+position).removeValue();
}
});
}
};
recyclerView.setAdapter(mAdapter);
}
public static class myViewHolder extends RecyclerView.ViewHolder{
private TextView nameTxt,dateApp,timeApp;
private Button detailBtn,mapBtn,deleteBtn,editBtn;
public myViewHolder(View itemView){
super(itemView);
nameTxt=(TextView)itemView.findViewById(R.id.nameTxt);
dateApp= (TextView) itemView.findViewById(R.id.dateAppointment);
timeApp=(TextView)itemView.findViewById(R.id.timeAppointment);
mapBtn = (Button) itemView.findViewById(R.id.mapBtn);
detailBtn = (Button) itemView.findViewById(R.id.detailBtn);
deleteBtn = (Button) itemView.findViewById(R.id.deleteBtn);
editBtn = (Button) itemView.findViewById(R.id.editBtn);
}
}
}
答案 0 :(得分:1)
更改对AppointmentData进行以下更改
public class AppointmentData {
// ...
private Object date;
// ...
public void setDate(Object date) {
this.date = date;
}
// ...
public AppointmentData(String name, String tel, String address, String time, Object date) {
// ...
}
// ...
public Object getDate() {
return date;
}
}
将数据库更改为:
Query db = FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").orderByChild("date");
将populateViewHolder中的这一行更改为:viewHolder.dateApp.setText(timestampToDateString(model.getDate()));
其中timestampToDateString是一个实用工具方法:
public static String timestampToDateString(long timestamp){
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date(timestamp);
return dateFormat.format(date);
}
将btnSave.onClickListener更改为此
final String key = FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").push().getKey();
// ...
Long date = mSelectedDate;
// ...
AppointmentData appointmentData = new AppointmentData(name, tel, address, time, date);
FirebaseDatabase.getInstance().getReference().child("Email").child(mCurrentUser.getUid()).child("Appointment").child(key).setValue(appointmentData);
// ...
像这样添加字段
private long mSelectedDate;
在datePic()中初始化它,如此
// ...
mYear = c.get(Calendar.YEAR);
// ...
mSelectedDate = fieldToTimestamp(mYear, mMonth, mDay);
并在onDateSelectedListener.onDateSet(...)中如此
// ...
mSelectedDate = fieldToTimestamp(year, monthOfYear, dayOfMonth);
其中fieldToTimestamp是辅助方法
private long fieldToTimestamp(int year, int month, int day) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
return (long) (calendar.getTimeInMillis() / 1000L);
}
我认为这应该是全部..哦,并删除所有旧的约会,因此它不会导致例外。
答案 1 :(得分:0)
这是可以解决您的问题的示例
//上面我的存储日期是毫秒格式。
ref.child("date").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<Long> d = new ArrayList<>();
for (DataSnapshot child : dataSnapshot.getChildren()) {
// save all millis in array list you can take your Bean class also
try {
long daa = Long.parseLong(child.getValue().toString());
d.add(daa);
} catch (Exception e) {
e.printStackTrace();
}
}
// sort array list you can use comparator if you have bean class
Collections.sort(d);
for (int i = 0; i < d.size(); i++) {
String dateString = new SimpleDateFormat("dd-MM-yyyy").format(new Date(d.get(i)));
Log.e("!_@@ date", dateString + "");
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("!!__: ", "onCancelled ", firebaseError.toException());
}
});
输出为: -
14-01-1970
26-01-1970
1970年6月3日
14-04-1970
答案 2 :(得分:0)
我制作了一个送餐应用程序,订单历史记录中按日期存储了日期,如您所见Order History 首先,请看我的数据库Database
现在,如果您仔细查看我的数据库,您将了解背后的逻辑。逻辑很简单,而不是使用RandomUId = UUID.randomUUID().toString();
,其中RandomUId = getrandoumUID();
是getrandoumUID()
public String getrandoumUID(){
Calendar cr = Calendar.getInstance();
SimpleDateFormat sdfr = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
Date todayr = cr.getTime();
String dater = sdfr.format(todayr);
return dater;
}
当您将数据存储到Firebase而不是使用随机uid时,请使用此方法。 现在,当您正常地在recyclerview中检索此数据时,它将以相反的顺序检索,以确保仅将列表中的每个项目添加到第'0'个索引
ArrayList.add(0,item);
adapter.notifyDataSetChanged();
请确保在OnCreate()
函数中声明以下步骤
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(Activity.this));
ArrayList= new ArrayList<>();
adapter = new Adapter(Activity.this,ArrayList);
recyclerView.setAdapter(adapter);