2016-12-28 11 views
2

私のAndroidアプリケーションには、MainActivityのArrayListが定義されています。FirebaseデータからArrayListを作成する

私は、ユーザーの興味を引き出し、それを自分のアレイリストに追加する方法を理解しようとすると、苦労しています。

は、ここに私のFirebaseデータが設定されている方法は次のとおりです。

FirebaseData

私は非同期にデータをロードしなければならないことを理解し、私は、私はそれについて移動する方法へと困惑しています。ここ

は、ArrayListに追加しようとしているために私のコードです:私は、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); 

それは、データベース内のfalseの場合、それがリストに追加されることはありません。例:[COMPETITION、文化、教育...など]

それはコンソールにリストを返すとき、私はちょうど空のリストを参照してください - 「[]」

+0

ここでuserInterestsを初期化します –

+0

返されるパスにデータベース内のデータがありますか?これをどのように確認しましたか? UIを再描画するためのアクションを実行しますか? .add()でブレークポイントを試してみたことがありますか?データベースからイベントを受け取った後、配列リストの内容はどこに出力されていますか? [How to Ask](http://stackoverflow.com/help/how-to-ask)と[mcveを作成する](http://stackoverflow.com/help/mcve)を参照してください。 – Kato

答えて

3

ブールにStringと変換してみてください。

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()); 
     } 
    } 
+0

これを使用すると、コンソールは空のリストを返します。私は行方不明のものがありますか? –

2

あなたは、Androidとfirebaseを使用している場合は、その後、私は、Firebase UIをfirebase-UIコンポーネントを使用するためにあなたを示唆し、それは

またはその代わりに、ブールにキャストしようとしているのは非常に参考になります、これはあなたが望むものであることが

関連する問題