2014-03-03 44 views
2

如何在android中從web動態圖像讀取,我有一個方法需要String類型的URL並返回drawable,我想從遠程位置獲取圖像並設置它在我的imageview中,並通過遠程位置更改爲圖像發生,這些更改會自動反映在我的android應用程序中。 我有這樣的代碼,任何幫助將是明顯的,並且在此先感謝在Android中讀取從web/api(.net)動態圖像

public static Drawable LoadImageFromWeb(String url){ 
    try{ 
     InputStream is = (InputStream) new URL(url).getContent(); 
     Drawable drw = Drawable.createFromPath(url2); 
     //Drawable draw = Drawable.createFromStream(is, url2); 
     return drw; 


    }catch(Exception ex){ 
     ex.printStackTrace(); 
     return null; 
    } 

感謝。

回答

1

您可以使用像畢加索或Universal-Image-Loader這樣的外部庫。 URLS:

+0

好的,我會試試這些。 –

+0

你可以分享一些使用畢加索的示例代碼,你提供給畢加索的鏈接,有點不可理解,因爲我從來沒有使用這個庫 –

+0

在github中,你有一個示例應用程序,可以幫助你瞭解畢加索如何工作=) –

1

在Asynctask或thrad中使用下面的http網絡連接。

  HttpParams httpParameters = new BasicHttpParams(); 
       // Set the timeout in milliseconds until a connection is established. 
       // The default value is zero, that means the timeout is not used.   
       int timeoutConnection = 20000; 
       HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
       // Set the default socket timeout (SO_TIMEOUT) 
       // in milliseconds which is the timeout for waiting for data. 
       int timeoutSocket = 30000; 
       HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);    
       httpclient = new DefaultHttpClient(httpParameters); 
       HttpPost httppost = new HttpPost(url); 
       //Adding the parameter values (if required input to remote service) 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair(Constants.URL_PARAM_PROVIDERID,Utilities.getProviderID(PageCurlGraph.this))); 
       nameValuePairs.add(new BasicNameValuePair("requestedDate",params[i])); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       //Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity httpEntity = response.getEntity(); 
       InputStream instream = httpEntity.getContent(); 
       Bitmap bitmap = BitmapFactory.decodeStream(instream); 
       gm = new GraphModel(); 
       gm.setBitmap(bitmap); 
+0

首先感謝您的回覆,請你告訴這些鍵值 nameValuePairs.add(新BasicNameValuePair(Constants.URL_PARAM_PROVIDERID,Utilities.getProviderID(PageCurlGraph.this))); nameValuePairs.add(new BasicNameValuePair(「requestedDate」,params [i])); –

+0

這些用於輸入到您的遠程服務器。如果不需要任何輸入刪除NameValuePair名單 – Sri

+0

謝謝,我會試試這個 –

1

你的代碼是一個糟糕的方式來顯示從URL的遠程圖像。它可能會導致您的應用程序無法響應 我建議你使用一些'圖像加載程序庫',它利用了android異步任務的優勢,並保持你的應用程序響應。

例如,你可以使用這個庫: https://github.com/androidquery/androidquery/releases/tag/0.26.8

所有你需要做的是導入庫到您的項目,然後加載你的形象在短短的視圖代碼:

ImageView imgView = (ImageView) findViewById(R.id.imageview); 
AQuery aq = new AQuery(this); // assume you are doing this inside activity 
String someImageURL = "http://someurl.com/someimage.jpg"; 

aq.id(imgView).image(someImageURL, true, true); // see documentation for detail 
0

如果你不想使用工具或圖像加載程序庫,並且你的應用程序不會連續與互聯網交互,那麼你可以從服務器獲取XML,包含圖像URL列表,解析XML,並在SD上逐一下載它們並使用ImageView.setImageResour離線顯示它們ce(...)此過程將使您的應用程序更快,您可以設置時間間隔來檢查服務器更新。

如果你有大量的圖像,那麼你必須使用圖像加載程序庫,因爲上述過程可能會導致設備上的內存空間問題。