2016-12-20 50 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) { 
      } 
     }); 
    } 
} 

希望这将帮助你:)

相关问题