Я недавно создал приложение, которое все еще находится в разработке.Нужна ваша помощь, потому что всякий раз, когда я получаю данные из базы данных Firebase, я получаю отдельные данные несколько раз.Посмотрите ниже мой код, базу данных, где вы правильно ответили на мой вопрос, и вы также получите то, что я пытаюсь сказать.
Мой код:
public class FragmentChat extends Fragment
{
EditText mMsgInput;
Button mSend;
LinearLayout mMsgContainerTv;
ScrollView mMsgContainer;
ProgressDialog mProgressDialog;
String name, email, image;
FirebaseAuth mAuth;
DatabaseReference mDataRef, mChatroomRef, mMessageRef;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
View chat = inflater.inflate(R.layout.fragment_chat, container, false);
mMsgInput = (EditText) chat.findViewById(R.id.fragment_chatETMsg);
mSend = (Button) chat.findViewById(R.id.fragment_chatBTSend);
mMsgContainerTv = (LinearLayout) chat.findViewById(R.id.fragment_chatLLMsgContainer);
mMsgContainer = (ScrollView) chat.findViewById(R.id.fragment_chatSVMsgContainer);
mAuth = FirebaseAuth.getInstance();
mDataRef = FirebaseDatabase.getInstance().getReference();
mChatroomRef = FirebaseDatabase.getInstance().getReference().child("Chatroom");
if(mAuth.getCurrentUser() == null){
Toast.makeText(getActivity(), "Please Login First", Toast.LENGTH_SHORT).show();
}else{
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setTitle("Loading data...");
mProgressDialog.setMessage("Please wait while we load your data into activity...");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.show();
mDataRef.child("Users").child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
name = dataSnapshot.child("name").getValue().toString();
email = dataSnapshot.child("email").getValue().toString();
image = dataSnapshot.child("image").getValue().toString();
mProgressDialog.dismiss();
}
@Override
public void onCancelled(DatabaseError p1)
{
mProgressDialog.dismiss();
}
});
sendmsg();
}
return chat;
}
@Override
public void onStart()
{
super.onStart();
if(mAuth.getCurrentUser() != null){
mChatroomRef.addChildEventListener(new ChildEventListener(){
@Override
public void onChildAdded(DataSnapshot data, String s)
{
if(data.exists()){
displayMsg(data);
}
}
@Override
public void onChildChanged(DataSnapshot data, String s)
{
if(data.exists()){
displayMsg(data);
}
}
@Override
public void onChildRemoved(DataSnapshot data)
{
}
@Override
public void onChildMoved(DataSnapshot data, String s)
{
}
@Override
public void onCancelled(DatabaseError ata)
{
}
});
}
}
private void sendmsg()
{
mSend.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
String msg = mMsgInput.getText().toString();
HashMap<String, Object> mHashmapS = new HashMap<String, Object>();
mChatroomRef.updateChildren(mHashmapS);
String mMessageKey = mChatroomRef.push().getKey();
mMessageRef = mChatroomRef.child(mMessageKey);
HashMap<String, Object> mHashmapMessage = new HashMap<String, Object>();
mHashmapMessage.put("name", name);
mHashmapMessage.put("msg", msg);
mMessageRef.updateChildren(mHashmapMessage);
mMsgInput.setText("");
Toast.makeText(getActivity(), "Message sent successfully...", Toast.LENGTH_SHORT).show();
}
});
}
private void displayMsg(DataSnapshot data)
{
Iterator it = data.getChildren().iterator();
while(it.hasNext()){
String msgMsg = (String) ((DataSnapshot) it.next()).getValue();
String msgName = (String) ((DataSnapshot) it.next()).getValue();
LayoutInflater mInflator = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View mView = mInflator.inflate(R.layout.item_msg, null);
TextView mMsgView = (TextView) mView.findViewById(R.id.item_msgTVMsg);
mMsgView.append(msgName + " :\n" + msgMsg + "\n ");
mMsgContainerTv.addView(mView, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mMsgContainer.fullScroll(ScrollView.FOCUS_DOWN);
}
}
}
Структура моей базы данных: чат >> messagekey>> 1. msg, 2. name
В моем приложении я получил несколько раз одно и то же msg и name
А также я хочу, чтобы данные были в структуре базы данных моего приложения.