所以我一直在我的应用程序中使用ValueEventListeners和ListenerForSignleValueEvent来从Firebase中提取数据。根据我的理解,应该立即调用onDataChanged()方法,并且这些方法一直在我的所有其他页面上工作。出于某种原因,它在连接到DatabaseReference之后也没有进入onDataChanged,也没有进入Firebase并弄乱数据。我知道onStart()正在工作,因为onClick for my按钮运行正常。
public class DocumentsPageFragment extends Fragment {
final DatabaseReference groupsReference = FirebaseDatabase.getInstance().getReferenceFromUrl("https://database.firebaseio.com/groups");
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.document_page,container,false);
}
@Override
public void onStart(){
super.onStart();
groupsReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String[] groupNames;
ArrayList<Group> groupArrayList = new ArrayList<Group>();
for (DataSnapshot group:dataSnapshot.getChildren()){
Group currentGroup = group.getValue(Group.class);
groupArrayList.add(currentGroup);
}
if(groupArrayList!= null && groupArrayList.size()<0){
groupNames = new String[groupArrayList.size()];
int i = 0;
for (Group group:groupArrayList){
groupNames[i] = group.getName();
i++;
}
}
else{
groupNames = new String[0];
}
final ListView groupsListView = (ListView) getActivity().findViewById(R.id.documents_groups_listview);
ArrayAdapter<String> groupListArrayAdapter =
new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,groupNames);
groupsListView.setAdapter(groupListArrayAdapter);
AdapterView.OnItemClickListener groupListViewClickListener =
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
openSelectedGroupsDocuments(groupsListView.getItemAtPosition(position).toString());
}
};
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Button uploadButton = (Button) getActivity().findViewById(R.id.documents_upload_doc_button);
uploadButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
DocumentUploadFragment fragment = new DocumentUploadFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent,fragment).commit();
}
});
}