为了账号安全,请及时绑定邮箱和手机立即绑定

getContext() 在 Fragment 中返回 null。视图似乎未附加

getContext() 在 Fragment 中返回 null。视图似乎未附加

哆啦的时光机 2022-05-12 17:19:22
Glide.with((getContext())).load(user.getImgURl()).into(image_profile);上面的行将 getContext 作为 null 返回,因此允许应用程序崩溃。我已将其添加到 onDataChange 方法下的片段中,如下所示。public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {    View view=inflater.inflate(R.layout.fragment_profile, container, false);    image_profile=view.findViewById(R.id.profile_image);    username=view.findViewById(R.id.username);    storageReference=FirebaseStorage.getInstance().getReference("uploads");    fuser=FirebaseAuth.getInstance().getCurrentUser();    reference=FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());    reference.addValueEventListener(new ValueEventListener() {        @Override        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {            User user= dataSnapshot.getValue(User.class);            username.setText(user.getUsername());            if(user.getImgURl()!= null && user.getImgURl().equals("default")){                image_profile.setImageResource(R.mipmap.ic_launcher);            }else{            Glide.with((getContext())).load(user.getImgURl()).into(image_profile);            }        }        @Override        public void onCancelled(@NonNull DatabaseError databaseError) {        }    });    image_profile.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            openImage();        }    });    return view;}该代码应该从 firebase 存储中检索图像并将其显示到 image_profile 上。以下是错误的 logcat:java.lang.NullPointerException: 您无法在 getActivity() 返回 null 的尚未附加的 View 或 Fragment 上开始加载(这通常发生在附加 Fragment 之前或销毁 Fragment 之后调用 getActivity() 时)。
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

在网上查了各种资料,终于这个起作用了。


        @Override

        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            User user = dataSnapshot.getValue(User.class);

            username.setText(user.getUsername());

            if (user.getImageURL().equals("default")){

                image_profile.setImageResource(R.mipmap.ic_launcher);

            } else {

                if(getContext()!=null)

               Glide.with(getActivity()).load(user.getImageURL()).into(image_profile);

            }

        }

要了解有关片段生命周期的更多信息

查看完整回答
反对 回复 2022-05-12
?
BIG阳

TA贡献1859条经验 获得超6个赞

在片段中使用 getActivity() 作为上下文,如下所示:下面的代码:

 Glide.with(getActivity())
            .load(imageUri)
            .into(imageview);


查看完整回答
反对 回复 2022-05-12
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

只需将检查添加到 null


if (getContext() != null) {

    Glide.with((getContext())).load(user.getImgURl()).into(image_profile);

}

并在 onDestroyView() 或 onDestroy() 中移除 Firebase 监听器:


reference.removeEventListener(listener);


查看完整回答
反对 回复 2022-05-12
  • 3 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信