![](/img/trans.png)
[英]How to retrieve full List Of Objects from Firebase that contains another List of String in it?
[英]How to retrieve a String and a List together from Firebase
我正在開發一個應用程序,您可以記錄您的日常任務並將日期、日期和時間保存到數據庫中。 您 select 日期、日期和時間,還記錄 startTime 和 endTime 包括任務然后保存到數據庫(FireBase)。 當我試圖檢索它時,我收到了這個錯誤
java.lang.IndexOutOfBoundsException:索引:1,大小:1
如果我評論
holder.startTime.setText(data.getTasks().get(0).getStartTime());
holder.endTime.setText( data.getTasks().get(1).getEndTime());
holder.taskTitle.setText(data.getTasks().get(2).getTask());
並且只離開
holder.date.setText(data.getDate());
日期將被檢索,否則我得到錯誤:
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.MainViewHolder> {
private List<TimeTableData> tableDataList= new ArrayList<>();
//private List<TimeTableData.Task> taskList = new ArrayList<>();
public void setTaskData(List<TimeTableData> tableDataList) {
this.tableDataList.addAll(tableDataList);
notifyDataSetChanged();
}
@NonNull
@Override
public MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.task_item_layout, parent, false);
return new MainViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MainViewHolder holder, int position) {
TimeTableData data = tableDataList.get(position);
holder.date.setText(data.getDate());
holder.startTime.setText(data.getTasks().get(0).getStartTime());
holder.endTime.setText( data.getTasks().get(1).getEndTime());
holder.taskTitle.setText(data.getTasks().get(2).getTask());
}
@Override
public int getItemCount() {
return tableDataList.size();
}
public class MainViewHolder extends RecyclerView.ViewHolder {
public TextView startTime, endTime, taskTitle,date;
public MainViewHolder(@NonNull View itemView) {
super(itemView);
startTime = itemView.findViewById(R.id.start_time);
endTime = itemView.findViewById(R.id.end_time);
taskTitle = itemView.findViewById(R.id.task_title);
date = itemView.findViewById(R.id.date);
}
}
}
recyclerView = findViewById(R.id.rv_task);
recyclerView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));
mainAdapter = new TaskAdapter();
mFirebaseDatabase=FirebaseDatabase.getInstance();
mDataBaseReference =mFirebaseDatabase.getReference().child("timeTable");
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
List<TimeTableData> taskLis = new ArrayList<>();
TimeTableData subTask = dataSnapshot.getValue(TimeTableData.class);
taskLis.add(subTask);
mainAdapter.setTaskData(taskLis);
recyclerView.setAdapter(mainAdapter);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
mDataBaseReference.addChildEventListener(mChildEventListener);`
public class TimeTableData implements Serializable {
private String id;
private String date;
private List<Task> tasks;
public TimeTableData(){}
public TimeTableData( String date,List<Task> taskList) {
//this.setId(id);
this.setDate(date);
this.setTasks(taskList);
}
// public TimeTableData(long date){
// this.setDate(date);
// }
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public List<Task> getTasks() {
return tasks;
}
public void setTasks(List<Task> tasks) {
this.tasks = tasks;
}
public static class Task {
private String task;
private String startTime;
private String endTime;
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
}
}`
我希望能夠檢索每個日期及其下的預期任務。
這是我的數據庫結構
我在 onBindViewholder 中正常設置
holder.startTime.setText(data.getStartTime());
holder.endTime.setText(data.getEndTime());
holder.taskTitle.setText(data.getTask());
使用 viewPager 和片段我將其設置為按索引獲取任務並設置為等效的 position
public static Fragment newInstance(TimeTableData timeTableData) {
AllTasksFragment fragment = new AllTasksFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(TABLE_DATA, timeTableData);
fragment.setArguments(bundle);
return fragment;
}
@NonNull
@Override
public Fragment getItem(int position) {
return AllTasksFragment.newInstance(tableDataList.get(position));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.