Кто-нибудь знает, как применить «isAdded» на уровне API 29 или выше? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь исправить ошибку в приложении, которое я разрабатываю с помощью некоторых учебных пособий, и в этих видеороликах люди делятся моей ошибкой и находят ответ с помощью «isAdded ()», но проблема для меня заключается в том, что Я использую API уровень 29, и на официальном сайте говорится, что это устарело на уровне 28. Я не хочу менять цель моего проекта на уровень API 28, потому что это может сделать его равным sh, так что любой знает, как я могу решить this?

Это должно выглядеть следующим образом , isAdded выделяется красным.

public class MessageActivity extends AppCompatActivity {

CircleImageView profile_image;
TextView username;

FirebaseUser fuser;
DatabaseReference reference;

ImageButton button_send;
EditText text_sent;

MessageAdapter messageAdapter;
List<Chat> mchat;

RecyclerView recyclerView;

Intent intent;

ValueEventListener seenListener;


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

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(MessageActivity.this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
            //finish();
        }
    });

    recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
    linearLayoutManager.setStackFromEnd(true);
    recyclerView.setLayoutManager(linearLayoutManager);

    profile_image = findViewById(R.id.profile_image);
    username = findViewById(R.id.username);
    button_send = findViewById(R.id.button_send);
    text_sent = findViewById(R.id.text_sent);

    intent = getIntent();
    final String userid = intent.getStringExtra("userid");
    fuser = FirebaseAuth.getInstance().getCurrentUser();

    button_send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String msg = text_sent.getText().toString();
            if (!msg.equals(""))  {
                sendMessage(fuser.getUid(), userid, msg);
            }
            else {
                Toast.makeText(MessageActivity.this, "You can´t send empty messages", Toast.LENGTH_SHORT).show();
            }
            text_sent.setText("");
        }
    });


    reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (isAdded()) {  //HERE
                User user = dataSnapshot.getValue(User.class);
                username.setText(user.getUsername());
                if (user.getImageURL().equals("default"))  {
                    profile_image.setImageResource(R.mipmap.ic_launcher);
                }
                else {
                    Glide.with(getApplicationContext()).load(user.getImageURL()).into(profile_image);
                }

                readMessages(fuser.getUid(), userid, user.getImageURL());
            }
        }

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

        }
    });

    seenMessage(userid);
}

private void seenMessage(final String userid) {
    reference = FirebaseDatabase.getInstance().getReference("Chats");
    seenListener = reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Chat chat = snapshot.getValue(Chat.class);
                if (chat.getReceiver().equals(fuser.getUid())  &&  chat.getSender().equals(userid))  {
                    HashMap<String, Object> hashMap = new HashMap<>();
                    hashMap.put("isseen", true);
                    snapshot.getRef().updateChildren(hashMap);
                }
            }
        }

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

        }
    });
}


private void sendMessage(String sender, String receiver, String message){

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    final String userid = intent.getStringExtra("userid");

    HashMap<String, Object>  hashMap = new HashMap<>();
    hashMap.put("sender", sender);
    hashMap.put("receiver", receiver);
    hashMap.put("message", message);
    hashMap.put("isseen", false);

    reference.child("Chats").push().setValue(hashMap);

    final DatabaseReference chatRef = FirebaseDatabase.getInstance().getReference("Chatlist")
            .child(fuser.getUid())
            .child(userid);

    chatRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (!dataSnapshot.exists()) {
                chatRef.child("id").setValue(userid);
            }
        }

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

        }
    });
}

private void readMessages(final String myid, final String userid, final String imageurl)  {
    mchat = new ArrayList<>();

    reference = FirebaseDatabase.getInstance().getReference("Chats");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            mchat.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren())  {
                Chat chat = snapshot.getValue(Chat.class);
                if (chat.getReceiver().equals(myid) &&  chat.getSender().equals(userid)  ||
                chat.getReceiver().equals(userid)  &&  chat.getSender().equals(myid))  {
                    mchat.add(chat);
                }

                messageAdapter = new MessageAdapter(MessageActivity.this, mchat, imageurl);
                recyclerView.setAdapter(messageAdapter);
            }
        }

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

        }
    });
}

private void status(String status) {
    reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());

    HashMap<String, Object> hashMap = new HashMap<>();
    hashMap.put("status", status);

    reference.updateChildren(hashMap);
}

@Override
protected void onResume() {
    super.onResume();
    status("online");
}

@Override
protected void onPause() {
    super.onPause();
    reference.removeEventListener(seenListener);
    status("offline");
}

}

1 Ответ

0 голосов
/ 31 января 2020

Редактировать: Вы можете удалить условие isAdded(), поскольку вы используете действие, а не фрагмент.

Исходный ответ:

android.app.Fragment класс устарел в API 28.

Вместо этого используйте этот класс androidx.fragment.app.Fragment из AndroidX.

Объявите этот зависимость в вашем build.gradle файле и использование androidx.fragment.app.Fragment import в вашем классе фрагментов вместо android.app.Fragment

...