为了账号安全,请及时绑定邮箱和手机立即绑定

如何在代码中的确切位置将数据从火库提取到Android工作室?

如何在代码中的确切位置将数据从火库提取到Android工作室?

30秒到达战场 2022-09-28 16:03:02
有没有办法从代码所在的火库中提取数据?我目前有 valueEventListeners,但它们都在它们下面的代码之后运行,从而使以下代码无效。我希望能够准确地在代码所在的位置提取一个值,而不是以后。到目前为止,我还没有在网上找到任何关于此的内容。我在代码中的问题的一个很好的例子:public void onItemClick(AdapterView<?> l, View v, final int position, long id) {        FirebaseAuth mAuth = FirebaseAuth.getInstance();        FirebaseUser user = mAuth.getCurrentUser();        final String uid = user.getUid();        databaseReference.addValueEventListener(new ValueEventListener() {            @Override            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {                cCESnapshot = dataSnapshot.child(uid).child("currChallenges").child(challengeList.get(position));            }            @Override            public void onCancelled(@NonNull DatabaseError databaseError) {            }        });        Intent intent = new Intent();        intent.setClass(this, ChallengeView.class);        intent.putExtra("snapshot", cCESnapshot.toString());        intent.putExtra("name", challengeList.get(position));        startActivity(intent);    }cCE快照为空,因为意向在值事件接收器之前运行。
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

是异步的,因此使用检索到的数据的唯一方法是 inside ,例如:onDataChange()onDataChange()


databaseReference.addValueEventListener(new ValueEventListener() {

        @Override

        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            cCESnapshot = dataSnapshot.child(uid).child("currChallenges").child(challengeList.get(position));


    Intent intent = new Intent();

    intent.setClass(this, ChallengeView.class);

    intent.putExtra("snapshot", cCESnapshot.toString());

    intent.putExtra("name", challengeList.get(position));

    startActivity(intent);

        }


        @Override

        public void onCancelled(@NonNull DatabaseError databaseError) {


        }

    });


查看完整回答
反对 回复 2022-09-28
?
郎朗坤

TA贡献1921条经验 获得超9个赞

这是一个异步操作,当数据到达时,将触发回调。您的代码将按顺序执行,这就是为什么您在 中未获得任何值的原因。onDataChangestartActivtycCESnapshot

在侦听器内移动代码。startActivity

但要小心,因为每次调用点击侦听器时,您都会添加一个 value 事件侦听器。这样,您每次单击都会有多个调用,因此多个 .onItemClickonDataChangestartActivities

相反,我建议使用仅在数据发生一次更改后才会触发的。addListenerForSingleValueEvent


查看完整回答
反对 回复 2022-09-28
  • 2 回答
  • 0 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信