Java 返回片段视图后执行Firebase查询
我有一个扩展了Java 返回片段视图后执行Firebase查询,java,android,firebase,android-fragments,firebase-realtime-database,Java,Android,Firebase,Android Fragments,Firebase Realtime Database,我有一个扩展了Fragment的类,它在onCreateView方法中包含对Firebase的查询。在使用调试器分析程序之后,我意识到在返回视图之前,不会执行此查询 该查询返回将加载到recyclerview中的信息。我还为数据本身创建了一个适配器。代码不会产生任何错误,但它没有按应有的方式运行理想情况下,查询应该首先执行,这样我就可以在此recyclerview上显示数据。知道为什么会这样吗 @Nullable @Override public View onCreateView(@NonNu
Fragment
的类,它在onCreateView
方法中包含对Firebase的查询。在使用调试器分析程序之后,我意识到在返回视图之前,不会执行此查询
该查询返回将加载到recyclerview中的信息。我还为数据本身创建了一个适配器。代码不会产生任何错误,但它没有按应有的方式运行理想情况下,查询应该首先执行,这样我就可以在此recyclerview上显示数据。知道为什么会这样吗
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState)
{
final View view=inflater.inflate(R.layout.frag_events, container, false);
eventIds =new ArrayList<String>();
//executes after view has been returned
ValueEventListener eventIdValListener=new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
{
eventIds.clear();
if(snapshot.exists())
{
for (DataSnapshot e : snapshot.getChildren())
{
String event = e.getValue(String.class);
eventIds.add(event);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error)
{
}
};
//returns data for current user
Query query=FirebaseDbSingleton.getInstance().dbRef.child("User").child(FirebaseDbSingleton.getInstance().user.getUid().toString()).child("events");
query.addValueEventListener(eventIdValListener);
return view;
}
@Nullable
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater充气机、@null最终视图组容器、@null Bundle savedInstanceState)
{
最终视图=充气机。充气(R.layout.frag_事件,容器,错误);
eventIds=newarraylist();
//在返回视图后执行
ValueEventListener eventIdValListener=新的ValueEventListener()
{
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot)
{
eventIds.clear();
if(snapshot.exists())
{
对于(DataSnapshot e:snapshot.getChildren())
{
String事件=e.getValue(String.class);
添加(事件);
}
}
}
@凌驾
已取消公共void(@NonNull DatabaseError)
{
}
};
//返回当前用户的数据
Query Query=firebasedsingleton.getInstance().dbRef.child(“用户”).child(firebasedsingleton.getInstance().User.getUid().toString()).child(“事件”);
addValueEventListener(eventIdValListener);
返回视图;
}
我给回收器和适配器留下了几行代码,只是为了保持代码简短。我有一种感觉,这可能是由于
eventIdValListener
中的innerclass造成的,但我不能完全确定。所有查询数据库的Firebase API都是异步的,并在调用后一段时间完成。实际上,在onCreateView
返回之前,您无法让它完成—它必须立即返回一个视图实例
由于您不知道查询需要多长时间才能完成,也无法保证需要多长时间,因此需要添加逻辑以在查询完成之前显示某些内容(例如等待指示器)。这是任何执行网络或数据库操作的应用程序的标准配置