2017-10-29 1 views
2

Data Structure in FirebaseWie Daten in Listview von Firebase

Können Sie mir helfen, in diesem Problem abrufen kann, versuche ich Daten in Listenansicht von in Feuerbasis angezeigt, aber nichts an!

ListView listView; 
FirebaseDatabase firebaseDatabase; 
DatabaseReference databaseReference; 
ArrayList<String> arrayList = new ArrayList<>(); 

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

    firebaseDatabase=FirebaseDatabase.getInstance(); 
    databaseReference= firebaseDatabase.getReference("Users"); 


    listView=(ListView) findViewById(R.id.list); 
    final ArrayAdapter<String> arrayAdapter= new ArrayAdapter<String>(this ,android.R.layout.simple_list_item_1,arrayList); 
    listView.setAdapter(arrayAdapter); 
    Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show(); 
    databaseReference.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      String value=dataSnapshot.getValue(String.class); 
      arrayList.add(value); 
      arrayAdapter.notifyDataSetChanged(); 

     } 

}

+0

erhalten Sie einen Fehler? –

+0

Nein, aber keine Daten in der Liste anzeigen –

+0

Überprüfen Sie meine Antwort, ändern Sie einfach Name und Layout der Aktivität –

Antwort

2
public class MainActivity extends AppCompatActivity{ 
ListView listView; 
    FirebaseDatabase firebaseDatabase; 
    DatabaseReference databaseReference; 
    ArrayList<String> arrayList = new ArrayList<>(); 
    ArrayAdapter<String> arrayAdapter; 

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

firebaseDatabase = FirebaseDatabase.getInstance(); 
databaseReference = firebaseDatabase.getReference("Users"); 


listView = (ListView) findViewById(R.id.lists); 

Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show(); 
databaseReference.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     String value=dataSnapshot.getValue(String.class); 
     arrayList.add(value); 
     arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList); 
     listView.setAdapter(arrayAdapter); 

    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 

    } 

    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

}} 

Dieser Zuhörer tatsächlich für Listen verwendet, so dass sie nicht aus dem Hörer. Auch, da der Benutzer nicht authentifiziert ist müssen Sie die Regeln in der Datenbank ändern: -

{ 
"rules": { 
    ".read": "true", 
    ".write": "true" 
} 
} 
+0

Vielen Dank Liebe, das ist die Antwort :) –

0

Weil Sie den falschen Hörer verwenden, sollte .Sie addValueEventListener() verwenden, wenn Sie ständig auf Veränderungen hören wollen, und wenn Sie müssen nur einmal hören, Sie addListenerForSingleValueEvent()

ValueEventListner Beispiel

ValueEventListener postListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // Get Post object and use the values to update the UI 
     Post post = dataSnapshot.getValue(Post.class); 
     // ... 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
     // ... 
    } 
}; 
mPostReference.addValueEventListener(postListener); 
PostDetailActivity.java 

Für weitere Informationen verwenden können, können Sie sehen, diese Firebase Probe auf GitHub

+0

Nein, das gleiche. Können Sie Datenbankstruktur schauen –