Моя активность переходит к предыдущей активности при обнаружении изменения базы данных Firebase - PullRequest
0 голосов
/ 04 февраля 2020

Thats Фрагмент, содержащий recyclerView, который приводит к активности с чатом * Это действие, в котором адаптер фрагмента приводит к

private String oppositeUid, oppositeNames, className;
private TextView oppositeNamesTextView;
private Button sendBtn;
private EditText message;
private FirebaseAuth mAuth;
private RecyclerView recyclerView;
private List<ModelChat> modelChatList;
private AdapterChat chatAdapter;

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

    mAuth = FirebaseAuth.getInstance();

    Intent intent = getIntent();
    oppositeUid = intent.getStringExtra("oppositeUid");
    oppositeNames = intent.getStringExtra("oppositeNames");
    className = intent.getStringExtra("class");
    Log.d("CLASSNAME", className);

    modelChatList = new ArrayList<>();

    oppositeNamesTextView = findViewById(R.id.oppositeNames);
    sendBtn = findViewById(R.id.sendBtn);
    message = findViewById(R.id.message);

    recyclerView = findViewById(R.id.chatRecyclerView);
    LinearLayoutManager linearLayout = new LinearLayoutManager(this);
    linearLayout.setStackFromEnd(true);
    recyclerView.setLayoutManager(linearLayout);

    oppositeNamesTextView.setText(oppositeNames);

    sendBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String mMessage = message.getText().toString().trim();
            if(!TextUtils.isEmpty(mMessage)){
                HashMap<Object, String> hashMap = new HashMap<>();
                hashMap.put("sender", mAuth.getCurrentUser().getUid());
                hashMap.put("receiver", oppositeUid);
                hashMap.put("message", mMessage);
                hashMap.put("timestamp", String.valueOf(System.currentTimeMillis()));

                if(className.equals("com.example.uploy.AdapterToDo$1")){
                    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Providers").child(mAuth.getCurrentUser().getUid()).child("Chats").child(oppositeUid);
                    databaseReference.push().setValue(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            message.setText("");
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(ChatActivity.this, "An error occurred!", Toast.LENGTH_SHORT).show();
                        }
                    });

                    DatabaseReference databaseReference1 = FirebaseDatabase.getInstance().getReference("Users").child(oppositeUid).child("Chats").child(mAuth.getCurrentUser().getUid());
                    databaseReference1.push().setValue(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            message.setText("");
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(ChatActivity.this, "An error occurred!", Toast.LENGTH_SHORT).show();
                        }
                    });
                }else{
                    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Providers").child(oppositeUid).child("Chats").child(mAuth.getCurrentUser().getUid());
                    databaseReference.push().setValue(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            message.setText("");
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(ChatActivity.this, "An error occurred!", Toast.LENGTH_SHORT).show();
                        }
                    });

                    DatabaseReference databaseReference1 = FirebaseDatabase.getInstance().getReference("Users").child(mAuth.getCurrentUser().getUid()).child("Chats").child(oppositeUid);
                    databaseReference1.push().setValue(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            message.setText("");
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(ChatActivity.this, "An error occurred!", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        }
    });

    if(className.equals("com.example.uploy.AdapterToDo$1")){
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Providers").child(mAuth.getCurrentUser().getUid()).child("Chats").child(oppositeUid);
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                modelChatList.clear();
                for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                    if(snapshot.getKey().equals("details")){
                        continue;
                    }
                    ModelChat modelChat = snapshot.getValue(ModelChat.class);
                    modelChatList.add(modelChat);
                    chatAdapter = new AdapterChat(ChatActivity.this, modelChatList);
                    chatAdapter.notifyDataSetChanged();
                    recyclerView.setAdapter(chatAdapter);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }else{
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(mAuth.getCurrentUser().getUid()).child("Chats").child(oppositeUid);
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                modelChatList.clear();
                for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                    if(snapshot.getKey().equals("details")){
                        continue;
                    }
                    ModelChat modelChat = snapshot.getValue(ModelChat.class);
                    modelChatList.add(modelChat);
                    chatAdapter = new AdapterChat(ChatActivity.this, modelChatList);
                    chatAdapter.notifyDataSetChanged();
                    recyclerView.setAdapter(chatAdapter);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Log.d("TAG", "PRESSED");
}

ПРОБЛЕМА заключается в том, что когда фрагмент открывает действие (он содержит сообщения в чате между пользователями, которые отлично загружаются в порядке), и действие обнаруживает любое изменение в ссылке на базу данных чатов, останавливается и загружает предыдущее действие (где находится фрагмент). Интересно, каково решение, и я был бы рад, если бы вы мне помогли.

...