数据没有正确加载在Firebase应用程序中 [英] Data did n't load in firebase app properly

查看:130
本文介绍了数据没有正确加载在Firebase应用程序中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在android studio上创建了一个使用firebase的应用程序。使用手机otp进行身份验证后,会出现一个searchview。当用户在搜索视图上搜索时,它将过滤结果并转到回收站视图等。但是我的问题是我的应用程序在一段时间后没有加载数据也包括searchview的其他领域也没有工作。此外,应用程序注销后,再次登录到应用程序后发生这个问题。



有人知道如何解决它?

  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>

}

onCreateView 中的所有代码都应写入 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 in onViewCreated.

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 in onViewCreated

这篇关于数据没有正确加载在Firebase应用程序中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆