簡體   English   中英

如何從 Firebase 一起檢索字符串和列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM