2016-09-22 60 views
0

我使用Firebase作为我的应用程序的数据库。当我想用Firebase填充我的ListView时遇到问题。使用Firebase填充我的ListView

下面是我使用的结果,代码和数据库的图片。所以我问自己,如果问题是与代码或我如何构建我的数据库。谢谢。

结果 - 结果实际上应该是:这个词Test应该是那里的链接,而是它被添加了新的元素:

火力地堡数据库:

这是我用来填充我的ListView的方法:

private void populateUserInfoList() { 
    firebase = new Firebase("https://top-ten-317ef.firebaseio.com"); 
    firebase.child("ToptenListItem").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 

      for (DataSnapshot child : snapshot.getChildren()) { 
       String TopTitle = (String) child.getValue(Boolean.parseBoolean("toptitle")); 
       String TopPosterPic = (String) child.getValue(Boolean.parseBoolean("topposter")); 
       ToptenListItem info = new ToptenListItem(TopTitle, TopPosterPic); 
       TopArrayList.add(info); 

      } 
      Collections.addAll(TopArrayList); 
      ToptenItemAdapter adapteri = new ToptenItemAdapter(getContext(), R.layout.itemrow, TopArrayList); 
      itemListView.setAdapter(adapteri); 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      String message = "Server error. Refresh page"; 
      Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show(); 
     } 


    }); 
} 
+0

你已经在你的问题中包含了JSON树的图片。请用实际的JSON替换为文本,您可以通过点击Firebase数据库控制台中的导出按钮轻松获取。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –

回答

0

而不是一个列表我建议你使用RecyclerView,Android创建了RecyclerView作为ListView的改进,所以可以,您可以使用ListView控件创建附加列表,但使用RecyclerView更容易,更好。您可以在这个帖子阅读更多:RecyclerView vs ListView

此外,您还可以使用FirebaseRecyclerAdapter这会为你做所有填充列表和检索你所有你想要的数据的工作刚刚恢复适配器列表(我通常我的代码中的用户自定义对象等于我的Firebase数据库的值,这样,您可以在FirebaseRecyclerAdapter中使用它们来改进数据检索)

例如,在此我使用配置文件图像填充用户的列表视图使用FirebaseRecyclerAdapter:

private void initializeRecyclerAdapter() { 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
    linearLayoutManager.setReverseLayout(true); 
    linearLayoutManager.setStackFromEnd(true); 
    mRecyclerUsersView.setLayoutManager(linearLayoutManager); 

    Query allPostsQuery = FirebaseUtil.getUsersRef(); 
    mAdapter = getFirebaseRecyclerAdapter(allPostsQuery); 
    mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
     @Override 
     public void onItemRangeInserted(int positionStart, int itemCount) { 
      super.onItemRangeInserted(positionStart, itemCount); 
      // TODO: Refresh feed view. 
     } 
    }); 

    mRecyclerUsersView.setAdapter(mAdapter); 
} 

private FirebaseRecyclerAdapter<User, UserListViewHolder> getFirebaseRecyclerAdapter(Query query) { 
    return new FirebaseRecyclerAdapter<User, UserListViewHolder>(
      User.class, R.layout.user_row_item, UserListViewHolder.class, query) { 

     @Override 
     protected void populateViewHolder(UserListViewHolder viewHolder, User user, int position) { 
      setupUser(viewHolder, user, position, null); 
     } 

    }; 
} 

private void setupUser(final UserListViewHolder UserViewHolder, final User user, final int position, final String inPostKey) { 
    //Set the items for every new view 
    UserViewHolder.setIcon(user.getPhoto_url()); 
    UserViewHolder.setText(user.getEmail()); 
    final String postKey; 
    if (mAdapter instanceof FirebaseRecyclerAdapter) { 
     postKey = ((FirebaseRecyclerAdapter) mAdapter).getRef(position).getKey(); 
    } else { 
     postKey = inPostKey; 
    } 
    FirebaseUtil.getUsersRef().child(postKey).addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(final DataSnapshot dataSnapshot) { 
      //Add users to the newGroup item 
      UserViewHolder.setPostClickListener(new UserListViewHolder.UserClickListener() { 
       @Override 
       public void onUserClick() { 
        // mNewGroup.addUserToGroup(dataSnapshot.getKey()); 
        mNewGroupUsers.addUserToGroup(dataSnapshot.getKey()); 
       } 
      }); 
     } 

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

而且,你可以看到,我的用户对象是如此简单(对象变量的名称必须等于你的火力点的物品,能级可以使用包含HashMap的对象中):

public class User { 
private String display_name; 
private String email; 
private String photo_url; 


    //[...] get/set methods and constructors 

最后,这里是我的viewHolder用户类:

public class UserListViewHolder extends RecyclerView.ViewHolder { 
    private final View mView; 
    private static final int POST_TEXT_MAX_LINES = 6; 
    private ImageView mIconView; 
    private TextView mAuthorView; 
    private UserClickListener mListener; 

    public UserListViewHolder(View itemView) { 
     super(itemView); 
     mView = itemView; 
     mIconView = (ImageView) mView.findViewById(R.id.user_image_profile); 
     mAuthorView = (TextView) mView.findViewById(R.id.user_text_profile); 
     mView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mListener.onUserClick(); 
      } 
     }); 
    } 

    public void setIcon(String url) { 
     GlideUtil.loadProfileIcon(url, mIconView); 
    } 

    public void setPostClickListener(UserClickListener listener) { 
     mListener = listener; 
    } 


    public void setText(final String text) { 
     if (text == null || text.isEmpty()) { 
      mAuthorView.setVisibility(View.GONE); 
      return; 
     } else { 
      mAuthorView.setVisibility(View.VISIBLE); 
      mAuthorView.setText(text); 
      mAuthorView.setMaxLines(POST_TEXT_MAX_LINES); 
     } 
    } 

    public interface UserClickListener { 
     void onUserClick(); 
    } 
} 

随意问任何疑问!希望它能帮助你!

+0

我可以看到我在帖子末尾添加的查看者类 –

+0

;) –