Java Android自定义ListView仅显示Firebase数据库中的一个项目
这是一个Firebase聊天应用程序,聊天窗口或ListView是活动的一部分 Firebase JSON树就是这样的 我创建了三个类FirebaseHelper、ChatListAdapter和ChatListManager firebaseheloper.javaJava Android自定义ListView仅显示Firebase数据库中的一个项目,java,android,json,listview,Java,Android,Json,Listview,这是一个Firebase聊天应用程序,聊天窗口或ListView是活动的一部分 Firebase JSON树就是这样的 我创建了三个类FirebaseHelper、ChatListAdapter和ChatListManager firebaseheloper.java public class FirebaseHelper { DatabaseReference db; Boolean saved; ArrayList<ChatListManager> ch
public class FirebaseHelper {
DatabaseReference db;
Boolean saved;
ArrayList<ChatListManager> chatListArr = new ArrayList<>();
public FirebaseHelper(DatabaseReference db) {
this.db = db;
}
public boolean sendChat(String uname, String message) {
if (chatListArr == null) {
saved = false;
} else {
try {
Map<String, Object> keyMap = new HashMap<String, Object>();
String tempKey = db.push().getKey();
db.updateChildren(keyMap);
DatabaseReference chat;
chat = db.child(tempKey);
Map<String, String> chats = new HashMap<String, String>();
chats.put("user", uname);
chats.put("message", message);
chat.setValue(chats);
saved = true;
} catch (DatabaseException e) {
e.printStackTrace();
saved = false;
}
}
return saved;
}
public void receiveChat(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
ChatListManager chatList = new ChatListManager();
while (i.hasNext()) {
chatList.setChatMessage((String) ((DataSnapshot) i.next()).getValue());
chatList.setChatUsername((String) ((DataSnapshot) i.next()).getValue());
chatListArr.clear();
chatListArr.add(chatList);
}
}
public ArrayList<ChatListManager> retrieve ()
{
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
receiveChat(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
receiveChat(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return chatListArr;
}
}
public class ChatListAdapter extends BaseAdapter {
Context context;
ArrayList<ChatListManager> chatListArr;
public ChatListAdapter(Context c,ArrayList<ChatListManager> chatListArray) {
this.context = c;
this.chatListArr = chatListArray;
}
@Override
public int getCount() {
return chatListArr.size();
}
@Override
public Object getItem(int position) {
return chatListArr.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView= LayoutInflater.from(context).inflate(R.layout.layout_chat_listview_row,parent,false);
}
TextView uname= (TextView) convertView.findViewById(R.id.chatMessageUser);
TextView message= (TextView) convertView.findViewById(R.id.chatMessageText);
final ChatListManager s= (ChatListManager) this.getItem(position);
uname.setText(s.getChatUsername());
message.setText(s.getChatMessage());
return convertView;
}
}
public class ChatListManager {
private String chatUsername;
private String chatMessage;
public ChatListManager() {
}
public ChatListManager(String chatUsername, String chatMessage){
this.setChatUsername(chatUsername);
this.setChatMessage(chatMessage);
}
public String getChatUsername() {
return chatUsername;
}
public void setChatUsername(String chatUsername) {
this.chatUsername = chatUsername;
}
public String getChatMessage() {
return chatMessage;
}
public void setChatMessage(String chatMessage) {
this.chatMessage = chatMessage;
}
}
public class ChatFragment extends Fragment implements View.OnClickListener {
private EditText chatMessageBox;
private Button chatSendButton;
private DatabaseReference db;
private ListView chatList;
private FirebaseHelper firebaseHelper;
private ChatListAdapter chatListAdapter;
private ChatListManager chatListManager;
public ChatFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View chatView = inflater.inflate(R.layout.fragment_chatroom, container, false);
chatMessageBox = (EditText) chatView.findViewById(R.id.chatMessageBox);
chatSendButton = (Button) chatView.findViewById(R.id.chatSendButton);
chatSendButton.setOnClickListener(this);
db = FirebaseDatabase.getInstance().getReference().child("chat_room");
firebaseHelper = new FirebaseHelper(db);
chatListAdapter = new ChatListAdapter(getActivity().getApplicationContext(), firebaseHelper.retrieve());
chatList = (ListView) chatView.findViewById(R.id.chatList);
chatList.setAdapter(chatListAdapter);
return chatView;
}
@Override
public void onClick(View v) {
if (v == chatSendButton) {
String uname = SharedPrefManager.getInstance(getActivity().getApplicationContext()).getDetails("u_name");
String message = chatMessageBox.getText().toString();
chatListManager = new ChatListManager(uname,message);
firebaseHelper.sendChat(chatListManager.getChatUsername(), chatListManager.getChatMessage());
chatListAdapter.notifyDataSetChanged();
}
}
}
ChatFragment.java
public class FirebaseHelper {
DatabaseReference db;
Boolean saved;
ArrayList<ChatListManager> chatListArr = new ArrayList<>();
public FirebaseHelper(DatabaseReference db) {
this.db = db;
}
public boolean sendChat(String uname, String message) {
if (chatListArr == null) {
saved = false;
} else {
try {
Map<String, Object> keyMap = new HashMap<String, Object>();
String tempKey = db.push().getKey();
db.updateChildren(keyMap);
DatabaseReference chat;
chat = db.child(tempKey);
Map<String, String> chats = new HashMap<String, String>();
chats.put("user", uname);
chats.put("message", message);
chat.setValue(chats);
saved = true;
} catch (DatabaseException e) {
e.printStackTrace();
saved = false;
}
}
return saved;
}
public void receiveChat(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
ChatListManager chatList = new ChatListManager();
while (i.hasNext()) {
chatList.setChatMessage((String) ((DataSnapshot) i.next()).getValue());
chatList.setChatUsername((String) ((DataSnapshot) i.next()).getValue());
chatListArr.clear();
chatListArr.add(chatList);
}
}
public ArrayList<ChatListManager> retrieve ()
{
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
receiveChat(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
receiveChat(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return chatListArr;
}
}
public class ChatListAdapter extends BaseAdapter {
Context context;
ArrayList<ChatListManager> chatListArr;
public ChatListAdapter(Context c,ArrayList<ChatListManager> chatListArray) {
this.context = c;
this.chatListArr = chatListArray;
}
@Override
public int getCount() {
return chatListArr.size();
}
@Override
public Object getItem(int position) {
return chatListArr.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView= LayoutInflater.from(context).inflate(R.layout.layout_chat_listview_row,parent,false);
}
TextView uname= (TextView) convertView.findViewById(R.id.chatMessageUser);
TextView message= (TextView) convertView.findViewById(R.id.chatMessageText);
final ChatListManager s= (ChatListManager) this.getItem(position);
uname.setText(s.getChatUsername());
message.setText(s.getChatMessage());
return convertView;
}
}
public class ChatListManager {
private String chatUsername;
private String chatMessage;
public ChatListManager() {
}
public ChatListManager(String chatUsername, String chatMessage){
this.setChatUsername(chatUsername);
this.setChatMessage(chatMessage);
}
public String getChatUsername() {
return chatUsername;
}
public void setChatUsername(String chatUsername) {
this.chatUsername = chatUsername;
}
public String getChatMessage() {
return chatMessage;
}
public void setChatMessage(String chatMessage) {
this.chatMessage = chatMessage;
}
}
public class ChatFragment extends Fragment implements View.OnClickListener {
private EditText chatMessageBox;
private Button chatSendButton;
private DatabaseReference db;
private ListView chatList;
private FirebaseHelper firebaseHelper;
private ChatListAdapter chatListAdapter;
private ChatListManager chatListManager;
public ChatFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View chatView = inflater.inflate(R.layout.fragment_chatroom, container, false);
chatMessageBox = (EditText) chatView.findViewById(R.id.chatMessageBox);
chatSendButton = (Button) chatView.findViewById(R.id.chatSendButton);
chatSendButton.setOnClickListener(this);
db = FirebaseDatabase.getInstance().getReference().child("chat_room");
firebaseHelper = new FirebaseHelper(db);
chatListAdapter = new ChatListAdapter(getActivity().getApplicationContext(), firebaseHelper.retrieve());
chatList = (ListView) chatView.findViewById(R.id.chatList);
chatList.setAdapter(chatListAdapter);
return chatView;
}
@Override
public void onClick(View v) {
if (v == chatSendButton) {
String uname = SharedPrefManager.getInstance(getActivity().getApplicationContext()).getDetails("u_name");
String message = chatMessageBox.getText().toString();
chatListManager = new ChatListManager(uname,message);
firebaseHelper.sendChat(chatListManager.getChatUsername(), chatListManager.getChatMessage());
chatListAdapter.notifyDataSetChanged();
}
}
}
我的问题是,在ListView中,它没有从firebase Db加载聊天消息,而是显示我发送的消息。就像我附加的AVD输出文件一样
我是一名学生,我参考了一些youtube视频和问题来编写这些代码
应该是,
public void receiveChat(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()) {
String message = (String) ((DataSnapshot) i.next()).getValue();
String uname = (String) ((DataSnapshot) i.next()).getValue();
ChatListManager chatList = new ChatListManager(uname,message);
chatListArr.add(chatList);
}
}
经过数小时的代码检查,我终于找到了自我 谢谢你的编辑,艾哈迈德先生,因为我是斯塔克夫的新手,所以它不允许我使用html