在一些教程的帮助下,我试图修复我正在开发的应用程序中的一个bug,在这些视频中,人们分享了我的错误,他们用"isAdded()“找到了答案,但对我来说,问题是我使用的是API 29,在官方网站上说,这在28级被废弃了。我不想将我的项目目标更改为API级别28,因为这可能会使它崩溃,所以有人知道我如何解决这个问题?
它应该是这样的,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");
}}
发布于 2020-01-31 08:56:39
编辑:,您可以删除isAdded()条件,因为您使用的是活动而不是片段。
原始答案:
API 28中不推荐使用android.app.Fragment类。
相反,可以使用来自AndroidX的这个AndroidX类。
在这文件中声明build.gradle依赖项,并在片段类中使用androidx.fragment.app.Fragment导入而不是android.app.Fragment
https://stackoverflow.com/questions/60000458
复制相似问题