Glide.with((getContext())).load(user.getImgURl()).into(image_profile);
La ligne ci-dessus renvoie getContext comme nul, autorisant ainsi l'application s'écraser. J'ai ajouté ceci dans un fragment sous la méthode onDataChange comme suit.
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)
Le code est censé récupérer une image du stockage Firebase et l'afficher sur l'image_profile. P >
Ce qui suit est le logcat de l'erreur:
java.lang.NullPointerException:
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; }
Toute aide est appréciée. Merci d'avance.
6 Réponses :
Ajoutez simplement une coche à null
reference.removeEventListener(listener);
Et supprimez l'écouteur Firebase dans onDestroyView () ou onDestroy ():
if (getContext() != null) { Glide.with((getContext())).load(user.getImgURl()).into(image_profile); }
Je vous remercie! La méthode destroyer permet au contexte de ne pas être nul. Cependant, je ne peux toujours pas voir l'image! Une opinion à ce sujet?
If(isAdded()) { Glide.with((getActivity().getContext())).load(user.getImgURl()).into(image_profile) } Hope it will help.
J'espère que cela fonctionne.
Glide.with(view.getContext()).load(user.getImgURl()).into(image_profile);
dans le fragment, utilisez getActivity () pour un contexte comme celui-ci: code ci-dessous:
Glide.with(getActivity()) .load(imageUri) .into(imageview);
Au lieu d'utiliser getContext
. Essayez d'utiliser getActivity
. Fonctionne tout le temps pour moi. En mettant cela dans le code, nous avons:
â³ android.content.Context â³ android.content.ContextWrapper â³ android.view.ContextThemeWrapper â³ android.app.Activity
Voici la relation entre une activité et un contexte:
Glide.with((getActivity())).load(user.getImgURl()).into(image_profile);
De l'illustration ci-dessus, nous pouvons voir que l'activité est un type de contexte et c'est pourquoi il est utilisable ici.
J'espère que cela aide. Joyeux codage.
J'ai vérifié divers éléments sur Internet, enfin celui-ci a fonctionné.
@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); } }
Pour en savoir plus sur le cycle de vie des fragments, veuillez parcourir ce lien
La ligne `` if (getContext ()! = Null) '' l'a corrigé pour moi. Belle solution