简体   繁体   中英

How can Retrieve data in ListView from Firebase

Firebase 中的数据结构

Can you help me in this problem, I try to display data from in firebase in Listview, but Not Display anything!

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();

        }

}

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) {

    }
});

 }}

This listener is actually used for lists, so its not from the listener. Also since the user is not authenticated you need to change the rules in your database to :-

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

Because you are using the wrong listener .You should use addValueEventListener () if you want to listen to changes continuously and if you need to listen just once, you can use addListenerForSingleValueEvent()

ValueEventListner Example

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

For more info , you can see this firebase sample on GitHub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM