数据没有正确加载在Firebase应用程序中 [英] Data did n't load in firebase app properly
问题描述
有人知道如何解决它?
public class FragmentHome extends Fragment {
private SearchView search;
查看视图;
DatabaseReference dataRef;
私有FirebaseListAdapter< String> firebaseListAdapter;
ListView mListView;
私人TextView文本;
ArrayList< String> city = new ArrayList< String>();
private int i = 0;
私有字符串数据,val,var;
ArrayAdapter< String>适配器;
ProgressBar progressBar;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup容器,@Nullable final Bundle savedInstanceState){
View v = inflater.inflate(R.layout。 activity_fragment_home,容器,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(按城市或部门搜索Docter);
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); $ b $ 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();
$ b @Override
public void onChildChanged(DataSnapshot dataSnapshot,String s){
data = dataSnapshot.child(city)。getValue(String.class); $ b $ val = dataSnapshot.child(department)。getValue(String.class);
city.add(data);
city.add(VAL);
city.add(var);
adapter.notifyDataSetChanged();
$ b $覆盖
public void onChildRemoved(DataSnapshot dataSnapshot){
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot,String s){
}
$ b $ @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);
}
返回false;
}
});
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override $ b $ 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;
$ / code>
}
onViewCreated
。 最好对onViewCreated中的字段进行任何子视图分配。这是因为框架为你做了一个自动的空检查,以确保你的Fragment的视图层次结构已经被创建和膨胀了。
public类FragmentHome扩展片段{
==>视图只会在
私人SearchView搜索;
查看v;
DatabaseReference dataRef;
私有FirebaseListAdapter< String> firebaseListAdapter;
ListView mListView;
私人TextView文本;
ArrayList< String> city = new ArrayList< String>();
private int i = 0;
私有字符串数据,val,var;
ArrayAdapter< String>适配器;
ProgressBar progressBar;
@Nullable
@Override
public查看onCreateView(LayoutInflater inflater,@Nullable ViewGroup容器,@Nullable final Bundle savedInstanceState){
v = inflater。膨胀(R.layout.activity_fragment_home,容器,FALSE);
if(container!= null){
container.removeAllViews();
}
return v;
$ b @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(按城市或部门搜索Docter);
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); $ b $ 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();
$ b @Override
public void onChildChanged(DataSnapshot dataSnapshot,String s){
data = dataSnapshot.child(city)。getValue(String.class); $ b $ val = dataSnapshot.child(department)。getValue(String.class);
city.add(data);
city.add(val);
city.add(var);
adapter.notifyDataSe tChanged();
$ b $覆盖
public void onChildRemoved(DataSnapshot dataSnapshot){
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot,String s){
}
$ b $ @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);
}
返回false;
}
});
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override $ b $ 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();
}
});
code $
$ b prerogressBar =(ProgressBar)v.findViewById(R .id.search_pro);onViewCreated
中出现I created an app using firebase on android studio.There is a searchview will appear after authentication with mobile otp. When user search on search view it will filter the results and goes to a recyclerview and so on. At the first time launch of activity(ie.,home activity after auth) app works perfectly.
But my problem is my app didn't load data after some time later.Also other fields including searchview also didn't work. Also,App works after logout and sign in again to the app after happened this problem.
Anybody know how to fix it?
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; }
}
解决方案All code you have written in
onCreateView
should be written inonViewCreated
.It's better to do any assignment of subviews to fields in onViewCreated. This is because the framework does an automatic null check for you to ensure that your Fragment's view hierarchy has been created and inflated.
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);
==> the view will only come into existence inonViewCreated
这篇关于数据没有正确加载在Firebase应用程序中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!