2016-05-18 6 views
1
ListView listView = (ListView) findViewById(R.id.listView); 
    final ArrayList<String> friends = new ArrayList<String>(); 
    players.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot player : dataSnapshot.getChildren()) { 
       Log.i("player", player.getKey()); 
       friends.add(player.getKey()); 

      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 

    while (friends.isEmpty()) { 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

     // link between a set of data and the AdapterView that displays the data 
     ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, 
       friends); 
     listView.setAdapter(arrayAdapter); 

Firebaseのスレッドがすべてのデータを取得して友人のアレイリストに保存するまで、現在のスレッドが待機すると予想しましたが、私はAndroidのエミュレータで黒い画面しか表示されません。 誰でもこの作業をどのように達成することができるかについての提案はありますか?リストビューにFirebaseのデータを入力するにはどうすればよいですか?

+0

'Thread.sleep(1000);'問題を引き起こす行。 'onDataChange'内のListViewにアダプタを追加しないのはなぜですか? –

答えて

4

コーディング楽しみます。あなたは決してそれをするべきではありません。代わりに、アダプタを作成してonDataChangeコールバック内のリストに追加する必要があります。このようなもの:

final ListView listView = (ListView) findViewById(R.id.listView); 
final ArrayList<String> friends = new ArrayList<String>(); 
players.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot player : dataSnapshot.getChildren()) { 
      Log.i("player", player.getKey()); 
      friends.add(player.getKey()); 
     } 
     ArrayAdapter arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, 
      friends); 
     listView.setAdapter(arrayAdapter); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

答えていただきありがとうございます。エラー:(50、49)エラー:ArrayAdapter(<匿名ValueEventListener>、int、ArrayList )のコンストラクタが見つかりません コンストラクタArrayAdapter.ArrayAdapterコンストラクタArrayAdapter.ArrayAdapter(Context、int、Object [])は適用されません (引数不一致; Contextに変換することはできません) – romikps

+0

@romikps私はそれに対処するために私の答えを編集しました。 'MainActivity'をアクティビティのクラス名に置き換えてください。 – Titus

+0

それは働いた!どうもありがとう! – romikps

1

firebase応答のBcozは、あなたがデータを取得する前に、そのほかののコードの実行をある程度の時間がかかり、その後、あなたは。だから、良いアイデアがいくつかの時間がかかるのリスナーの内側にコードを入れてfirebase応答を取得します... ..

はあなたonDataChange()メソッドにこれらの行を追加し、条件ながら終了後for loop ................

ArrayAdapter arrayAdapter = new ArrayAdapter(YourClassName.this,android.R.layout.simple_list_item_1,friends); 
     listView.setAdapter(arrayAdapter); 

削除...... .................

Thread.sleep(1000);は、UIスレッドをブロックしているためである.......................

関連する問題