2016-12-20 53 views
0

我跟着下面的教程,它的工作原理,但它只能檢索一個空間節點數據,我如何檢索所有節點的數據?下面的照片是我的數據庫。如何從Firebase中將所有節點數據檢索到Android中的listview?

enter image description here


DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl("my url"); 
    final FirebaseListAdapter<String> firebaseListAdapter = new FirebaseListAdapter<String>(this, String.class, android.R.layout.simple_list_item_1, databaseReference) { 
     @Override 
     protected void populateView(View v, String model, int position) { 
      TextView textView= (TextView) v.findViewById(android.R.id.text1); 
      textView.setText(model); 
     } 
    }; 
    listView.setAdapter(firebaseListAdapter); 

回答

0

一個FirebaseListAdapter可以顯示項目的列表。您的數據模型不是一個列表,而是一棵樹。所以它不能顯示一個FirebaseListAdapter

+0

嗨弗蘭克,得到它,謝謝你的解釋,對了,所以確實存在有其他的方式來添加樹在ListView? – Mickeywu520

0

我已創建Adapter類結合ListViewrow_item.xmlListView項目的顯示列表。

FireListAdapter.java

public class FireListAdapter extends BaseAdapter { 

    private List<User> modelList = new ArrayList<User>(); 
    private Context context; 
    LayoutInflater inflater; 

    public FireListAdapter(Context context, List<User> modelList) { 
     this.context = context; 
     this.modelList = modelList; 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     return modelList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return modelList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 

     view = inflater.inflate(R.layout.row_item, null); 

     TextView textName = (TextView) view.findViewById(R.id.textName); 
     TextView textEmail = (TextView) view.findViewById(R.id.textEmail); 
     textName.setText(modelList.get(position).getName()); 
     textEmail.setText(modelList.get(position).getEmail()); 

     return view; 
    } 
} 

而創建Welcome.java用於顯示的數據從FirebaseDatabaseListView

public class Welcome extends AppCompatActivity implements View.OnClickListener { 

    private ListView listView; 
    private List<User> myModelList = new ArrayList<User>(); 
    private DatabaseReference mFirebaseDatabase; 
    private FirebaseDatabase mFirebaseInstance; 
    private String TAG = Welcome.class.getSimpleName(); 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.welcome); 
     setUI(); 
     mFirebaseInstance = FirebaseDatabase.getInstance(); 
     // get reference to 'signUp' node Here signUp is table in FirebaseDatabase 
     mFirebaseDatabase = mFirebaseInstance.getReference("signUp"); 
     getData(); 
    } 

    public void setUI() { 
     textProfile = (TextView) findViewById(R.id.textWelcome); 
     listView = (ListView) findViewById(R.id.listItem); 
    } 

    //This method is getting data from FirebaseDatabase 
    public void getData() { 
     mFirebaseDatabase.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Iterable<DataSnapshot> snapshotIterable = dataSnapshot.getChildren(); 
       Iterator<DataSnapshot> iterator = snapshotIterable.iterator(); 
       while (iterator.hasNext()) { 

        DataSnapshot dataSnapshot1 = iterator.next(); 
        User user = dataSnapshot1.getValue(User.class); 
        user.setName(user.getName()); 
        user.setEmail(user.getEmail()); 
        myModelList.add(user); 
        FireListAdapter fireListAdapter = new FireListAdapter(Welcome.this, myModelList); 
        fireListAdapter.notifyDataSetChanged(); 
        listView.setAdapter(fireListAdapter); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
      } 
     }); 
    } 
} 

希望這將幫助你:)

相關問題