2016-03-07 66 views
1

我有滑翔一個奇怪的錯誤,我不知道該怎麼辦纔好。基本上我有這個功能,它從reddit.com/r/earthporn/加載圖像安卓:滑翔在onStart /錯誤的onResume

newsdata.data.children [位置] .data.url是URL的列表

public void displayImage(final int position) { 
     Drawable d = view.getContext().getResources().getDrawable(R.drawable.ic_collections_white_24dp); 
     System.out.println(newsData.data.children[position].data.url); 
     Glide.with(view.getContext()) 
       .load(newsData.data.children[position].data.url) 
       .asBitmap()  
       .listener(new RequestListener<String, Bitmap>() { 
        @Override 
        public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) { 
         displayImage(position + 1); 
         //todo: make sure we don't run into a index out of bounds. 
         return false; 
        } 

        @Override 
        public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) { 
         return false; 
        } 
       }) 
       .centerCrop() 
       .error(d) 
       .into(new BitmapImageViewTarget(view.getImageView()) { 
        @Override 
        protected void setResource(Bitmap resource) { 
         super.setResource(resource); 
         view.setImageBitmap(resource); 
         wallPaperBitmap = resource; 
         System.out.println(resource); 
        } 
       }); 
    } 

的Android不能加載出現在subreddit上的每一個圖像。發生這種情況時,我下載下一張圖片。在今天的運行中,它將加載此圖像http://imgur.com/HOSg2FC,稱爲例外,然後加載此代碼將按預期方式運行OnCreate,該代碼將按預期方式運行。它運行,遇到異常,再次調用displayImages()並設置正確的圖像。 (請讓我知道,如果有更好的方法來做到這一點)

的onResume /在onStart是問題所在。代碼將運行,遇到異常,將錯誤繪製爲可繪製,再次調用displayImages,但不更改imageview。 setResource(位圖資源)也會給我正確的位圖,但不會讓我更新imageview。

基本上,它凍結的ImageView到錯誤繪製,或在空白屏幕中,如果沒有繪製,不會讓我改變它。

調用的onResume用下面的代碼:

if(wallPaperBitmap != null) { 
      view.setImageViewPicture(wallPaperBitmap); 
      //view.showButtons(); 
      System.out.println("bitmap != null"); 
     } 
     else { 
      retrieveImage(SubReddit.Earth); 
      System.out.println("bitmap = null"); 
     } 

將設置正確的畫面。

我想,也許這樣我試着用diskcachestrategy.none但這並沒有幫助,這可能是與緩存的問題。作爲最後的手段,一旦setResource被更新後的位圖調用,或者只是使用Picasso,我可能會刷新屏幕,但我寧願避免這種情況。

任何幫助表示讚賞!

編輯:我也遇到了錯誤:d/Skia的:--- SkImageDecoder ::廠空在onStart

返回

回答

0

滑翔可以在onStart重新啓動失敗的請求,這將觸發故障,則設置錯誤可繪製。爲了解決這個問題,你應該做兩件事情:

  1. 調用setImageResource/setImageDrawable自己(外onResourceReady)之前,請務必呼籲View S和Target小號clear()。調用clear()將防止滑行從管理該View/Target,這反過來將無法重新啓動處理通信負載停止滑行。

  2. 如果你繼續通過滑翔(加載的資源的引用通常是BitmapDrawable,你需要確保以空出你的參考,當TargetonLoadClearedonLoadFailed方法被調用,這ISN「 t直接關係到這個問題,但是它在上面的代碼中是錯誤的,並且如果Glide在引用它時重新使用了Bitmap,則會導致奇怪的錯誤