2016-11-17 29 views
1

我使用這些代碼行(我使用picasso庫)下載圖像並將其加載到我的RelativeLayout的背景中。第一次運行應用後,Android studio Picasso加載器不工作

Target target = new Target() { 
@Override 
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
    relative_layout.setBackground(new BitmapDrawable(getResources(), bitmap)); 
    } 
@Override 
public void onBitmapFailed(Drawable errorDrawable) { 
relative_layout.setBackgroundResource(R.drawable.blolo); 
} 
@Override 
public void onPrepareLoad(Drawable placeHolderDrawable) { 
relative_layout.setBackgroundResource(R.drawable.blolo); 
} 
}; 
Picasso.with(this) 
.load("http://i.imgur.com/D3IBDDS.jpg") 
.into(target); 

事情是,當我第一次運行我的模擬器的應用程序時,一切正常。問題是,我下次運行應用程序時,它永遠不會工作,背景永遠不會改變。我可以向你保證,我不會改變代碼中的任何內容。我只是再次運行應用程序。但是,如果我改變了一行代碼,例如我做了一些評論,例如://等等等等,如果我按下run即使評論沒有功能,它也會再次運作。和之前一樣,如果我再次按下運行應用程序而不對代碼進行任何更改,背景也不會改變。有沒有錯誤或我是否鬧鬼?

編輯:一些logchat輸出我發現,我第一次運行應用程序時,logchat表明onBitmapLoaded()運行,一切工作正常。其他時候,我運行應用程序日誌顯示onPrepareLoad()運行並設置背景到我的佔位符,因爲這個問題W /設置:設置airplane_mode_on已從android.provider.Settings.System移動到android.provider.Settings.Global ,返回只讀值。

回答

1

我終於找到了答案。我認爲我已經完成的編碼不會被視爲垃圾。不幸的是我錯了,我不得不添加這行代碼,使其穩定和正確。我在這裏爲其他與我有同樣問題的人添加它:

relative_layout.setTag(target); 
0

請確保您的Instant Run已禁用,因爲這已知會導致代碼無法正確刷新的問題。

如果您仍然遇到問題,請轉至File -> Invalidate Caches/Restart...,然後重新啓動Android Studio。

+0

不,我做了他們兩個。第一個根本不工作。第二個只適用於第一次運行應用程序。 –

0

使用AQuery這個最好的一個,從URL在運行時讀取/下載圖像

應用水平進入的gradle **編譯「com.googlecode.android查詢:Android的查詢:0.24。 ** 3'

如何使用:

ImageView img= (ImageView) findViewById(R.id.image); 

    AQuery aQuery = new AQuery(img); 

    aQuery.id(img).image("http://i.imgur.com/D3IBDDS.jpg",true, true); 

在第二個參數兩個布爾值表示文件緩存和內存高速緩存,如果你的圖像視圖採用S ame URL第二次然後不再下載它將使用來自緩存的相同圖像。

  1. 快速
  2. 簡單
  3. 使用方便
  4. 它有很多功能,就如同在任何服務器響應,您可以使用進度條,直到圖像需要時間來下載內存緩存和文件緩存,默認圖像,在ListView和RecyclerView中快速反射。
+0

嗯,我不想爲imageview下載圖片。畢加索對我來說是完美的畢加索。我想下載一張圖片並將其設置爲RelativeLayout的背景。在這種情況下,我必須下載圖片並將其放在bitmapDrawable中,就像我在上面的代碼行中一樣。這是我需要畢加索的原因。 –

相關問題