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上。
以下是该错误的日志记录:
java.lang.NullPointerException:
at com.bumptech.glide.util.Preconditions.checkNotNull(Preconditions.java:31)
at com.bumptech.glide.Glide.getRetriever(Glide.java:675)
at com.bumptech.glide.Glide.with(Glide.java:707)
at com.hello.khushboo.messaging.Fragments.ProfileFragment$1.onDataChange(ProfileFragment.java:110)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.5:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.5:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.5:55)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
感谢您的帮助。 预先谢谢你。
答案 0 :(得分:1)
在片段中使用getActivity()进行如下操作: 下面的代码:
Glide.with(getActivity())
.load(imageUri)
.into(imageview);
答案 1 :(得分:1)
检查了Internet上的各种内容,终于可以了。
@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);
}
}
要了解有关碎片生命周期的更多信息,请仔细阅读link
答案 2 :(得分:0)
只需将检查添加为空
if (getContext() != null) {
Glide.with((getContext())).load(user.getImgURl()).into(image_profile);
}
并在onDestroyView()或onDestroy()中删除Firebase侦听器:
reference.removeEventListener(listener);
答案 3 :(得分:0)
If(isAdded()) {
Glide.with((getActivity().getContext())).load(user.getImgURl()).into(image_profile)
}
希望这会有所帮助。
答案 4 :(得分:0)
我希望它能起作用。
Glide.with(view.getContext()).load(user.getImgURl()).into(image_profile);
答案 5 :(得分:0)
代替使用sql+= ", commodityPricePerKg = ? ";
。尝试使用getContext
。一直为我工作。将其放入代码中,我们可以:
getActivity
这是活动和上下文之间的关系:
Glide.with((getActivity())).load(user.getImgURl()).into(image_profile);
从上面的插图中,我们可以看到Activity是一种Context,这就是为什么它在这里可用的原因。
我希望这会有所帮助。快活的编码。