2012-06-24 58 views
1

我在我的服務器數據庫中有400個圖像。我能夠獲取這些圖像並顯示在我的模擬器中。但是從服務器獲取圖像花費了大量的時間。因此我想要異步獲取圖像。我怎樣才能完成這項任務?幫我對此...將提前感謝....在android中異步獲取鏡像服務器?

我想下面的代碼轉換爲異步任務....

我的代碼:

public View getView(.......) 
{ 
ImageView myimgview = (ImageView) view.findViewById(R.id.imageView100); 
drawable = LoadImageFromWebOperations(v.getTag().toString()); 
myimgview.setImageDrawable(drawable); 
--- 
--- 
--- 
} 

private Drawable LoadImageFromWebOperations(String url) { 
try { 
    InputStream is = (InputStream) new URL(url).getContent(); 
    Drawable d = Drawable.createFromStream(is, "image.png"); 
    return d; 
    } 
catch (Exception e) 
{ 
    System.out.println("Exc=" + e); 
    return null; 
} 
} 

回答

0

您可以組合使用線程與處理程序:

public void setImageInThread(final ImageView imageView, final String url) { 
    final Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message message) { 
      Drawable result = (Drawable) message.obj; 
      imageView.setImageDrawable(result); 
     } 
    }; 

    new Thread() { 
     @Override 
     public void run() { 
      Drawable drawable = getDrawable(url); 
      Message message = handler.obtainMessage(1, drawable); 
      handler.sendMessage(message); 
     } 
    }.start(); 
} 

哪裏getDrawable是你的函數來獲取圖像同步。

+0

嗨,感謝您的迴應...我想異步顯示圖像... – user1448108

+0

這是異步的。我的意思是,函數「getDrawable(url)」是你當前擁有的(同步)函數。由於它在一個線程中執行,它將被異步執行。 – Ixx

+0

或者只是忘記我說「同步」。這將被異步執行。 – Ixx

0

我用Prime爲我所有的圖像加載,它可以很容易地照顧到這一點。

+0

感謝您的回覆。如果我想顯示進度條,我該怎麼做? – user1448108

2

簡單的解決方案是使用異步任務的Java

聽到一些例子

private class DownloadImages AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 
    //use your async task hear 
    //in your case call LoadImageFromWebOperations(urls[0]) 
    } 

    @Override 
    protected void onPostExecute(String result) { 

    } 
} 

,並通過將科目編號圖像URL

DownloadImages task = new DownloadImages(); 
    task.execute(new String[] { "http://your image url.com" }); 

聽稱之爲異步任務是此

很好的教程

http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask

+0

謝謝...這也是一個很好的解決方案 – user1448108