簡體   English   中英

如何從 Firebase 檢索 ListView 中的數據

[英]How can Retrieve data in ListView from Firebase

Firebase 中的數據結構

你能幫我解決這個問題嗎,我嘗試在 Listview 中顯示 firebase 中的數據,但不顯示任何內容!

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

    }
});

 }}

這個監聽器實際上是用於列表的,所以它不是來自監聽器。 此外,由於用戶未通過身份驗證,您需要將數據庫中的規則更改為:-

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

因為您使用了錯誤的偵聽器。如果您想連續偵聽更改並且只需要偵聽一次,則應該使用addValueEventListener () ,您可以使用addListenerForSingleValueEvent()

ValueEventListner 示例

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

有關更多信息,您可以在GitHub 上查看此 firebase 示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM