2016-12-20 10 views
0

私は以下のチュートリアルに従っていますが、それは動作しますが、それは1つの空間ノードデータを取り出すことしかできません。どのようにすべてのノードデータを取り出すことができますか?下の写真は私のデータベースです。FirebaseのすべてのノードデータをAndroidのリストビューに取得するにはどうすればよいですか?

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

こんにちはフランクの希望は、それを得たと感謝あなたの説明は、方法によって、そのリストビューにツリーを追加するための他の方法がありますか? – Mickeywu520

0

私はListView内の項目の表示リストのためListViewrow_item.xmlを結合するためのAdapterクラスを作成しています。

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; 
    } 
} 

そしてListViewFirebaseDatabaseからの表示データ用Welcome.javaを作成します。

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

これがお手伝いします:)

関連する問題