相同的初始对象的数据正在加载到变量中。 (从Firebase检索数据)

时间:2018-07-03 19:14:17

标签: android firebase firebase-realtime-database

所以基本上我想做的是'从API获取团队的名称。然后基于团队的名称,我已经将团队的国家/地区标志的图片网址存储在了Firebase数据库中。因此,在从API获取团队名称之后,我试图从数据库中获取以下团队的网址。我面临的问题是“相同的网址(一线球队的网址)正在加载到所有团队的网址”。

标志的手动编码网址的JSON代码:

{"Country_images_url" : {
                         "india a" : {
                                                  "imageURL" : "url_1"},
                         "india b" : {
                                                  "imageURL" : "url_2" } } }

在此for()循环中,我从API检索团队的名称:

DatabaseReference database_country_images_url = FirebaseDatabase.getInstance().getReference("Country_images_url");
ArrayList<CricketScore> details = new ArrayList<CricketScore>;

for(int i=0, i< length; i++){ 
   String team_1_name;
   String team_2_name; // both this strings are filled with valued obtained from API

   String team_1_url = url_of_team(team_1_name); // user-defined method
   String team_2_url = url_of_team(team_2_name);

 // And then I'm saving this data in an ArrayList
   CricketScore live = new CricketScore(team_1_name, team_2_name, team_1_url, team_2_url);
   details.add(live);
}

这是用户定义的方法:

public String url_of_team(String team){
DatabaseReference db_url = database_country_images_url.child(team.toLowerCase()).child("imageURL");
    db_url.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
                url = dataSnapshot.getValue(String.class);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    return url;
}
}

代码工作正常,但是我得到的唯一prblm是在Arraylist中加载了相同的URL。 我不明白怎么了。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

 CricketScore live = new CricketScore();

使用setter方法在此处设置team_1_name,team_2_name的值。

 public String url_of_team(String team){
    DatabaseReference db_url = database_country_images_url.child(team.toLowerCase()).child("imageURL");
        db_url.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                    url = dataSnapshot.getValue(String.class);
            //Set the data in object here - team_1_url, team_2_url
            details.add(live);  

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        return url;
    }
    }

尝试如上所示在onDataChange()内在arraylist中添加数据