【问题标题】:Make an ArrayList from Firebase Data从 Firebase 数据创建一个 ArrayList
【发布时间】:2016-12-29 05:34:00
【问题描述】:

我在我的 Android 应用中为我的 MainActivity 定义了一个 ArrayList。

我在尝试了解如何检索用户的兴趣并将其添加到我的数组列表时遇到了困难。

以下是我的 Firebase 数据的设置方式:

我知道我必须异步加载数据,但我不知道该怎么做。

这是我尝试添加到 ArrayList 的代码:

public class MainActivity extends AppCompatActivity {


private DatabaseReference eventDatabase;
private DatabaseReference usersDatabase;

private FirebaseAuth mAuth;
private String currentUserID;

private ArrayList<String> userInterests = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    eventDatabase = FirebaseDatabase.getInstance().getReference().child("Event");
    usersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

    mAuth = FirebaseAuth.getInstance();

    currentUserID = mAuth.getCurrentUser().getUid();

    usersDatabase.child(currentUserID).child("interests").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                boolean isInterested = (Boolean)postSnapshot.getValue();
                if (isInterested){
                    userInterests.add(postSnapshot.getKey());
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    System.out.println(userInterests);

我希望 ArrayList 包含用户的兴趣,如果在数据库中为 false,则不会添加到列表中。示例:[竞赛、文化、教育...等]

当它在控​​制台返回列表时,我只看到一个空列表——“[]”

【问题讨论】:

  • 你在哪里初始化 userInterests
  • 返回路径的数据库中是否有数据?你是如何验证这一点的?您是否采取任何措施使 UI 重绘?您是否尝试过在 .add() 处设置断点以查看它是否被调用过?从数据库接收到事件后,数组列表的内容在哪里输出?见how to askcreating an mcve

标签: android firebase firebase-realtime-database


【解决方案1】:

这就是你想要的。

usersDatabase.child(currentUserID).child("interests").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
     for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
           boolean isInterested = (Boolean)postSnapshot.getValue();
        if (isInterested) {
            userInterests.add(postSnapshot.getKey());
        }
   }

【讨论】:

  • 控制台在使用时返回一个空列表。有什么我想念的吗?
【解决方案2】:

如果你在 Android 上使用 firebase,那么我建议你使用 firebase-ui 组件,Firebase UI,这将非常有帮助

或者不要尝试转换为布尔值,而是尝试使用字符串并将其转换为布尔值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2013-10-05
    • 2021-05-19
    相关资源
    最近更新 更多