Glisse affirmer: java.lang.IllegalArgumentException: Vous devez appeler cette méthode sur le thread principal
Quelqu'un a utilisé le levier pour extraire des images à partir d'un thread d'arrière-plan? Je reçois cette assertion:
java.lang.IllegalArgumentException: You must call this method on the main thread
mais en fonction de ce fil, cela devrait fonctionner:
https://github.com/bumptech/glide/issues/310
Encore, je ne peux pas le faire fonctionner, à moins que je l'appelle depuis le thread principal.
Ici, c'est ce que j'essaie de faire depuis le thread principal:
Glide.get(mContext);
loadUserImage(userImageUrl);
//wait 5 seconds before trying again
int imageLoadingTimeOut = mContext.getResources().getInteger(R.integer.image_loading_time_out);
if (imageLoadingTimeOut > 0) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
if (!mUserImageLoaded) {
loadUserImage(userImageUrl);
}
}
}, imageLoadingTimeOut);
}
}
et la loadUserImage:
private boolean mUserImageLoaded = false;
private void loadUserImage(String userImageUrl) {
if (userImageUrl != null && !userImageUrl.isEmpty() && !mUserImageLoaded) {
Glide.with(mContext).using(Cloudinary.getUrlLoader(mContext)).load(userImageUrl).crossFade().listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
mImageMessageContent.invalidate();
mUserImageLoaded = true;
return false;
}
}).into(mImageMessageContent);
} else {
mImageMessageContent.setVisibility(View.GONE);
}
}
et mContext est juste l'activité pointeur "this".
De toute façon, je peux utiliser Glide à partir d'un thread différent de main?
n'appelez pas la méthode de chargement dans le thread séparé ou de faire ce thread exécuter onUi fil
pouvez-vous donner plus de détails? Comment puis-je faire ne pas s'exécuter sur un onUI fil? J'ai besoin de passer l'ImageView pointeur de glisser. Ce pointeur est récupéré à partir de l'INTERFACE principale de thread.
pouvez-vous donner plus de détails? Comment puis-je faire ne pas s'exécuter sur un onUI fil? J'ai besoin de passer l'ImageView pointeur de glisser. Ce pointeur est récupéré à partir de l'INTERFACE principale de thread.
OriginalL'auteur gmmo | 2016-02-26
Vous devez vous connecter pour publier un commentaire.
La
into(ImageView)
méthode deGlide
vous demande d'appeler cela seulement sur le thread principal, mais quand vous passez le chargement d'une Minuterie, il sera exécuté dans unbackground
fil.Ce que vous pouvez faire est de récupérer une image bitmap en appelant
get()
au lieu deinto()
et définissez ensuitebitmap
sur leImageView
en appelantsetImageBitmap()
.Vous pouvez également jeter un oeil à ce document pour plus d'informations.
OriginalL'auteur Avsector
De poster le code juste au cas où il aide quelqu'un.
OriginalL'auteur free_style
OriginalL'auteur Raj Joshi
Dans mon cas, je veux afficher les notifications de
FirebaseMessagingService
avec l'image qui va être téléchargé viaGlide
, ce qui m'a donné le succès est ce morceau de code:OriginalL'auteur Suraj Vaishnav