片段视图返回后执行的 Firebase 查询
Posted
技术标签:
【中文标题】片段视图返回后执行的 Firebase 查询【英文标题】:Firebase query executing after fragment view has been returned 【发布时间】:2021-01-25 16:54:54 【问题描述】:我有一个扩展 Fragment
的类,并在其 onCreateView
方法中包含对 Firebase 的查询。用调试器分析程序后,我意识到这个查询直到视图返回后才执行。
查询返回将加载到回收站视图中的信息。我还为数据本身创建了一个适配器。该代码不会产生任何错误,但它没有按应有的方式运行。 理想情况下,查询应该首先执行,这样我才能在这个 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;
我为回收器和适配器省略了一些行,只是为了保持这段代码简短。我感觉这可能是由于 eventIdValListener
中的内部类,但我不完全确定。
【问题讨论】:
【参考方案1】:所有查询数据库的 Firebase API 都是异步的,并在调用后一段时间后完成。你不可能在onCreateView
返回之前完成它 - 它必须立即返回一个 View 实例。
由于您不知道查询完成需要多长时间,并且无法保证多长时间,您需要添加逻辑以在查询完成之前显示某些内容(例如等待指示器)。这是任何执行网络或数据库操作的应用程序的标准。
【讨论】:
以上是关于片段视图返回后执行的 Firebase 查询的主要内容,如果未能解决你的问题,请参考以下文章