registro recuperar guardar firebaseinstanceidservice fcm datos java android firebase authentication firebase-database

java - guardar - recuperar datos firebase web



Los datos no se cargaron correctamente en la aplicaciĆ³n de Firebase (1)

Todo el código que ha escrito en onCreateView debe escribirse onViewCreated .

Es mejor hacer cualquier asignación de subvistas a los campos en onViewCreated. Esto se debe a que el marco realiza una comprobación automática nula para garantizar que la jerarquía de vistas de Fragment se haya creado e inflado.

public class FragmentHome extends Fragment { private SearchView search; View v; DatabaseReference dataRef; private FirebaseListAdapter<String> firebaseListAdapter; ListView mListView; private TextView text; ArrayList<String> city=new ArrayList<String>(); private int i=0; private String data,val,var; ArrayAdapter<String> adapter; ProgressBar progressBar; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable final Bundle savedInstanceState) { v = inflater.inflate(R.layout.activity_fragment_home,container,false); if (container!=null){ container.removeAllViews(); } return v; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); progressBar= (ProgressBar) v.findViewById(R.id.search_pro); search= (SearchView) v.findViewById(R.id.search); search.onActionViewExpanded(); search.setIconified(false); search.setInputType(InputType.TYPE_NULL); search.setQueryHint("Search Docter By City Or Department"); mListView= (ListView) v.findViewById(R.id.mList); mListView.setVisibility(View.INVISIBLE); dataRef=FirebaseDatabase.getInstance().getReference().child("Docters"); adapter=new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, city); mListView.setAdapter(adapter); adapter.notifyDataSetChanged(); dataRef.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { data=dataSnapshot.child("city").getValue(String.class); val=dataSnapshot.child("department").getValue(String.class); if (!city.contains(data)){ city.add(data); } if (!city.contains(val)){ city.add(val); } search.setInputType(InputType.TYPE_CLASS_TEXT); progressBar.setVisibility(View.GONE); adapter.notifyDataSetChanged(); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { data=dataSnapshot.child("city").getValue(String.class); val=dataSnapshot.child("department").getValue(String.class); city.add(data); city.add(val); city.add(var); adapter.notifyDataSetChanged(); } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String text) { return false; } @Override public boolean onQueryTextChange(String text) { if (!text.isEmpty()){ adapter.notifyDataSetChanged(); mListView.setVisibility(View.VISIBLE); adapter.getFilter().filter(text); }else{ mListView.setVisibility(View.INVISIBLE); } return false; } }); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String itemRef = (String) adapter.getItem(position); search.setVisibility(View.INVISIBLE); mListView.setVisibility(View.INVISIBLE); FragmentTransaction ft=getChildFragmentManager().beginTransaction(); DocterList fragment=new DocterList(); Bundle item=new Bundle(); item.putString("item",itemRef); fragment.setArguments(item); ft.replace(R.id.activity_fragment_home,fragment); ft.addToBackStack(null); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } }); }

progressBar= (ProgressBar) v.findViewById(R.id.search_pro); ==> la vista solo aparecerá en onViewCreated

Creé una aplicación usando firebase en android studio. Aparecerá una búsqueda después de la autenticación con otp móvil. Cuando la búsqueda del usuario en la vista de búsqueda filtrará los resultados, irá a una vista del reciclador, y así sucesivamente. Por primera vez, la aplicación de actividad (es decir, actividad hogareña después de la autenticación) funciona perfectamente.

Pero mi problema es que mi aplicación no cargó datos después de un tiempo más tarde. También otros campos, incluida la vista de búsqueda, tampoco funcionaron. Además, la aplicación funciona después de cerrar la sesión e iniciar sesión de nuevo en la aplicación después de que haya ocurrido este problema.

Alguien sabe como arreglarlo?

public class FragmentHome extends Fragment { private SearchView search; View view; DatabaseReference dataRef; private FirebaseListAdapter<String> firebaseListAdapter; ListView mListView; private TextView text; ArrayList<String> city=new ArrayList<String>(); private int i=0; private String data,val,var; ArrayAdapter<String> adapter; ProgressBar progressBar; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable final Bundle savedInstanceState) { View v= inflater.inflate(R.layout.activity_fragment_home,container,false); if (container!=null){ container.removeAllViews(); } progressBar= (ProgressBar) v.findViewById(R.id.search_pro); search= (SearchView) v.findViewById(R.id.search); search.onActionViewExpanded(); search.setIconified(false); search.setInputType(InputType.TYPE_NULL); search.setQueryHint("Search Docter By City Or Department"); mListView= (ListView) v.findViewById(R.id.mList); mListView.setVisibility(View.INVISIBLE); dataRef=FirebaseDatabase.getInstance().getReference().child("Docters"); adapter=new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, city); mListView.setAdapter(adapter); adapter.notifyDataSetChanged(); dataRef.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { data=dataSnapshot.child("city").getValue(String.class); val=dataSnapshot.child("department").getValue(String.class); if (!city.contains(data)){ city.add(data); } if (!city.contains(val)){ city.add(val); } search.setInputType(InputType.TYPE_CLASS_TEXT); progressBar.setVisibility(View.GONE); adapter.notifyDataSetChanged(); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { data=dataSnapshot.child("city").getValue(String.class); val=dataSnapshot.child("department").getValue(String.class); city.add(data); city.add(val); city.add(var); adapter.notifyDataSetChanged(); } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String text) { return false; } @Override public boolean onQueryTextChange(String text) { if (!text.isEmpty()){ adapter.notifyDataSetChanged(); mListView.setVisibility(View.VISIBLE); adapter.getFilter().filter(text); }else{ mListView.setVisibility(View.INVISIBLE); } return false; } }); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String itemRef = (String) adapter.getItem(position); search.setVisibility(View.INVISIBLE); mListView.setVisibility(View.INVISIBLE); FragmentTransaction ft=getChildFragmentManager().beginTransaction(); DocterList fragment=new DocterList(); Bundle item=new Bundle(); item.putString("item",itemRef); fragment.setArguments(item); ft.replace(R.id.activity_fragment_home,fragment); ft.addToBackStack(null); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } }); return v; }

}