Я использую Firebase, чтобы получить данные и загрузить их во фрагмент.Фрагмент содержит список, куда я хочу добавить дату с помощью адаптера.Адаптер принимает 3 массива в качестве входных данных для создания настраиваемого списка.
Вот код AttendanceFragment
:
public class AttendanceFragment extends Fragment {
private DatabaseReference reference, attendance, classid, divisionid, studentid, dates;
private Button attbutton;
private ListView list;
private View mainview;
private Activity activity;
private ArrayList<String> date = new ArrayList<String>(),
state = new ArrayList<String>(),
teacher = new ArrayList<String>();
private ListAdapter listAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_attendence,container,false);
}
@Override
public void onStart(){
super.onStart();
mainview = this.getView();
activity = this.getActivity();
attbutton = mainview.findViewById(R.id.att_per);
list = mainview.findViewById(R.id.att_main_list);
reference = FirebaseDatabase.getInstance().getReference();
attendance = reference.child(KeyStrings.attendance);
classid = attendance.child(KeyStrings.class1);
divisionid = classid.child(KeyStrings.division1);
studentid = divisionid.child(KeyStrings.student1);
dates = studentid.child("2018-07-06");
attbutton.setText(dates.getKey());
studentid.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Toast.makeText(activity, "Does it work?", Toast.LENGTH_LONG).show();
for(DataSnapshot d1: dataSnapshot.getChildren()){
date.add(d1.getKey());
state.add(d1.child(KeyStrings.att_status).getValue().toString());
teacher.add(d1.child(KeyStrings.att_created_by).getValue().toString());
}
listAdapter = new AttendanceAdapter(activity, date, state, teacher);
list.setAdapter(listAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
Код позволяет установить текстовую кнопку с текстом в датах.ключ хранится в Firebase.Таким образом, указание на отсутствие проблем с подключением или разрешением.Но никакой код addValueEventListener
не работает.
Выдает следующую ошибку:
Ошибка прослушивания / Attendance / 1 / A / 1: DatabaseError: Разрешение отклонено
Это происходит только для addValueEventListener
, и к массивам ничего не добавляется.Событие на самом деле даже не запускается, так как не отображается ни одного тостового сообщения.
Вот код для AttendanceAdapter
:
public class AttendanceAdapter extends ArrayAdapter<String>{
private ArrayList<String> date;
private ArrayList<String> state;
private ArrayList<String> teacher;
private Activity context;
public AttendanceAdapter(Activity context, ArrayList<String>date, ArrayList<String>state, ArrayList<String>teacher) {
super(context, R.layout.fragment_attendence, date);
this.date=date;
this.state=state;
this.teacher=teacher;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = context.getLayoutInflater();
View listviewItem = inflater.inflate(R.layout.fragment_attendence,null,true);
TextView dateview=(TextView)listviewItem.findViewById(R.id.att_list_date);
TextView stateview=(TextView)listviewItem.findViewById(R.id.att_list_stat);
TextView teacherview=(TextView)listviewItem.findViewById(R.id.att_list_teacher);
dateview.setText(date.get(position));
stateview.setText(state.get(position));
teacherview.setText(teacher.get(position));
return listviewItem;
}
}
РЕДАКТИРОВАТЬ 1
AsЯ сказал ранее, что, вероятно, нет проблем с авторизацией или авторизацией в Firebase.Но вот правила:
{"rules": {".read": true, ".write": true}}