gpt4 book ai didi

Android- Firebase 数据未显示在 ArrayList 中

转载 作者:太空狗 更新时间:2023-10-29 13:03:46 25 4
gpt4 key购买 nike

我正在尝试从 Firebase 数据库中检索数据。顶级节点是消息,子节点是作者和消息。登录后,聊天消息将从数据库中提取。 ChatActivity 调用 ChatListAdapter使用以下代码:-

    mAdapter = new ChatListAdapter(this, mDatabaseReference);
mChatListView.setAdapter(mAdapter);

这里的mChatListView是一个RecyclerView。适配器代码如下:-

    public class ChatListAdapter extends RecyclerView.Adapter<ChatListAdapter.ViewHolder> {
private Activity mActivity;
private DatabaseReference mDatabaseReference;
private ArrayList<DataSnapshot> mSnapshotList;

private ChildEventListener mListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
mSnapshotList.add(dataSnapshot);
notifyDataSetChanged();
}

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

}
};

public class ViewHolder extends RecyclerView.ViewHolder {
TextView authorName, body;

public ViewHolder(View view) {
super(view);
authorName = (TextView) itemView.findViewById(R.id.author);
body = (TextView) itemView.findViewById(R.id.message);

}
}

public ChatListAdapter(Activity activity, DatabaseReference ref) {
this.mActivity = activity;
this.mDatabaseReference = ref.child("messages");
mDatabaseReference.addChildEventListener(mListener);
mSnapshotList = new ArrayList<>();
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.chat_row, parent, false);

return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

InstantMessage message = getItem(position);
String author = message.getAuthor();
holder.authorName.setText(author);
String msg = message.getMessage();
holder.body.setText(msg);
}

public InstantMessage getItem(int i) {
DataSnapshot snapshot = mSnapshotList.get(i);
return snapshot.getValue(InstantMessage.class);
}

@Override
public int getItemCount() {
return mSnapshotList.size();
}
}

ChatActivity 如下:-

    public class ChatActivity extends AppCompatActivity {

private RecyclerView mChatListView;
private DatabaseReference mDatabaseReference;
private ChatListAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_chat);

mDatabaseReference = FirebaseDatabase.getInstance().getReference();
mChatListView = (RecyclerView) findViewById(R.id.chat_list_view);
}

@Override
public void onStart(){
super.onStart();
mAdapter = new ChatListAdapter(this, mDatabaseReference);
mChatListView.setAdapter(mAdapter);
}

@Override
public void onStop() {
super.onStop();
mAdapter.cleanUp();
}
}

最佳答案

有两种方法可以解决这个问题。 <强> This 是一种推荐的方式,您可以使用 FirebaseRecyclerAdapter this 从 Firebase 实时数据库检索数据并将其显示在 RecyclerView 是您可以使用 ArrayAdapter 的方式。

但请注意,为了使用这些答案,您需要添加 Firebase-UI 依赖项。参见 here最新版本。

关于Android- Firebase 数据未显示在 ArrayList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51531524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com