2014-01-16 34 views
-2

請幫我用這些代碼,它不顯示來自URL的圖像。Android - 從URL加載圖像不起作用

另一個問題,如何調試每個功能,如「url.openConnection」,「getInputStream」....以確認它們是否正常工作?

謝謝

public class MainActivity extends Activity { 

    Bitmap bitmap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     LinearLayout mainLayout = (LinearLayout)findViewById(R.id.mainlayout); 
     // ImageView 
     ImageView imgView = new ImageView(this); 
     mainLayout.addView(imgView); 

     bitmap = loadImage("https://www.google.com.vn/logos/doodles/2014/dian-fosseys-82nd-birthday-5702250374627328-hp.jpg"); 
     imgView.setImageBitmap(bitmap); 


    } 

    public Bitmap loadImage(String src) 
    { 
     try 
     { 
      URL url = new URL(src); 
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      Bitmap myBitmap = BitmapFactory.decodeStream(input); 
      input.close(); 
      return myBitmap; 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
      return null; 
     } 

    } 

} 
+0

請加mainlayout的代碼請 – Arshak92

+2

還需要設置佈局參數ImageView的 –

+0

主要佈局是LinearLayout中,沒有任何部件。我在代碼中創建它們 –

回答

2

問題是你正在主線程上進行網絡通信,並且因爲這個原因肯定會得到NetworkOnMainThreadException

雖然你可以實現一個AsyncTask來管理你的網絡調用,但我強烈建議使用支持聯網功能的圖像庫來爲你做所有煩人的工作。

https://github.com/nostra13/Android-Universal-Image-Loader

+0

我使用此代碼從此http://www.youtube.com/watch?v=KmYJBhz1gmk,我看到他在主線程中使用.... –

+0

不,它沒有得到任何NetworkOnMainThreadException,程序運行好,但沒有顯示任何圖像! –

+0

如果您在運行loadImage(...)方法之前遇到問題,請檢查堆棧跟蹤以瞭解發生了什麼問題。無論如何,如果你在你的主UI線程上調用它,你*就會被綁定到'connection.connect();'上的'NetworkOnMainThreadException'。 – Yjay

0

可能是一個好主意,選擇ImageLoader庫,而不是自己做這一切的細節問題的東西。它也沒有優化並且容易出錯。