首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有谁知道如何在API 29级或以上应用"isAdded“?

有谁知道如何在API 29级或以上应用"isAdded“?
EN

Stack Overflow用户
提问于 2020-01-31 08:41:28
回答 1查看 138关注 0票数 0

在一些教程的帮助下,我试图修复我正在开发的应用程序中的一个bug,在这些视频中,人们分享了我的错误,他们用"isAdded()“找到了答案,但对我来说,问题是我使用的是API 29,在官方网站上说,这在28级被废弃了。我不想将我的项目目标更改为API级别28,因为这可能会使它崩溃,所以有人知道我如何解决这个问题?

它应该是这样的,isAdded是用红色高亮显示的。

代码语言:javascript
运行
复制
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");
}

}

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 08:56:39

编辑:,您可以删除isAdded()条件,因为您使用的是活动而不是片段。

原始答案:

API 28中不推荐使用android.app.Fragment类。

相反,可以使用来自AndroidX的这个AndroidX类。

文件中声明build.gradle依赖项,并在片段类中使用androidx.fragment.app.Fragment导入而不是android.app.Fragment

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60000458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档