2016-02-26 24 views
6

ana iş parçacığında çağırmalısınız. Ben onu aramak sürece, bu işe alınamıyor, henüzGlide assert: java.lang.IllegalArgumentException: Bu yöntemi, bir arka plan iş parçacığından görüntüler almak için kullanılan kayma kullanılan herkes için

https://github.com/bumptech/glide/issues/310

:

java.lang.IllegalArgumentException: You must call this method on the main thread 

ama bu konuya göre, (Bence) çalışması gerekir: Bu assert almaya devam ana iş parçacığı.

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); 
    } 
} 

ve 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); 
    } 
} 

ve mContext sadece etkinlik "bu" işaretçi olduğunu

İşte ben ana iş parçacığı gelen yapmaya çalışıyorum budur.

Her neyse, Glide'ı ana sayfasından farklı bir iş parçacığından kullanabilir miyim?

thx!

+0

ayrı iplik yük yöntemini çağırın veya iplik çalıştırmak onUi iplik –

+0

daha ayrıntılı ki yapmazlar? OnUI iş parçacığı üzerinde çalıştırmak değil nasıl yapabilirim? Kaydırmak için ImageView işaretçisini geçmem gerekiyor. Bu işaretçi ana UI iş parçacığından geri alınır. – gmmo

cevap

7

Glide ait into(ImageView) yöntem yalnızca ana iş parçacığı üzerinde diyoruz gerektirir, ancak bir Timer yükleme geçerken bir background dizisindeki çalıştırılacaktır. Ne yapabilirsiniz

get() yerine into() arayarak bir bit eşlem almak için ve daha sonra setImageBitmap() arayarak ImageView üzerinde bitmap olduğunu ayarlayın.

Glide.with(getApplicationContext()) 
    .load("your url") 
    .asBitmap() 
    .into(new BitmapImageViewTarget(imgView) { 
     @Override 
     protected void setResource(Bitmap resource) { 
     //Play with bitmap 
     super.setResource(resource); 
     } 
    }); 

Ayrıca daha fazla bilgi için bu document bir göz alabilir.

2

Kodu, birinin yardımcı olması durumunda kaydettirin. Ana ui dizisindeki

Bitmap myBitmap = Glide.with(applicationContext) 
     .load(yourUrl) 
     .asBitmap() 
     .centerCrop() 
     .into(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL) 
     .get() 
imageView.setImageBitmap(myBitmap); 
0

Resmi güncelle

runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Glide.with(MainActivity.this) 
            .load("image URL") 
            .into(imageView); 
         } 
        });