【问题标题】:Firebase query executing after fragment view has been returned片段视图返回后执行的 Firebase 查询
【发布时间】: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 中的内部类,但我不完全确定。

【问题讨论】:

    标签: java android firebase android-fragments firebase-realtime-database


    【解决方案1】:

    所有查询数据库的 Firebase API 都是异步的,并在调用后一段时间后完成。你不可能在onCreateView 返回之前完成它 - 它必须立即返回一个 View 实例。

    由于您不知道查询完成需要多长时间,并且无法保证多长时间,您需要添加逻辑以在查询完成之前显示某些内容(例如等待指示器)。这是任何执行网络或数据库操作的应用程序的标准。

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2013-07-04
      • 1970-01-01
      • 2011-08-22
      • 2021-10-09
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多