Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之異步獲取並下載網絡資源-下載圖片和下載文本內容

Android開發之異步獲取並下載網絡資源-下載圖片和下載文本內容

編輯:關於Android編程

1)從指定的URL獲取對應的流   既然要獲取網絡資源,那麼首先得有個URL,那麼這裡我首先封裝一個打開URL連接獲取到的InputStream 流,這樣一來無論是圖片資源還是文本文件資源都可以使用該接口方法來獲取流。   該功能主要應用URLConnection和HttpURLConnection來實現,具體實現方案如下:   復制代碼 private InputStream openHttpConnection(String urlString) throws IOException{                  InputStream in = null;         int response = -1;         URL url = new URL(urlString);         URLConnection conn = url.openConnection();                  if(!(conn instanceof HttpURLConnection)){             throw new IOException("It is not an HTTP connection");         }         try {             HttpURLConnection httpConn = (HttpURLConnection) conn;             httpConn.setAllowUserInteraction(false);             httpConn.setInstanceFollowRedirects(true);             httpConn.setRequestMethod("GET");             httpConn.connect();             response = httpConn.getResponseCode();             if (response == HttpURLConnection.HTTP_OK) {                 in = httpConn.getInputStream();             }         } catch (Exception ex) {             Log.v("Networking",ex.getLocalizedMessage());             throw new IOException("Error connecting");         }         return in;              } 復制代碼 (2)封裝了上面的獲取流方法接口後,我們就可以利用上面封裝的方法來獲取並下載相應圖片和文本文件內容了   獲取並下載圖片資源方法:   復制代碼 private Bitmap downloadImage(String url){         Bitmap bitmap = null;         InputStream in = null;         try {             in = openHttpConnection(url);             bitmap = BitmapFactory.decodeStream(in);             in.close();         } catch (IOException e) {             // TODO Auto-generated catch block             Log.v("NetworkingActivity", e.getLocalizedMessage());         }         return bitmap;     } 復制代碼     獲取並下載文本內容方法:   復制代碼 private String downloadText(String url){         int BUFFER_SIZE = 2000;         InputStream is = null;         try {             is = openHttpConnection(url);         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();             return "";         }         InputStreamReader isr = new InputStreamReader(is);         int charRead;         String str="";         char[] inputBuffer = new char[BUFFER_SIZE];         try {             while((charRead=isr.read(inputBuffer))>0){                 String readString = String.copyValueOf(inputBuffer, 0, charRead);                 str += readString;                 inputBuffer = new char[BUFFER_SIZE];             }             is.close();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();             return "";         }                                    return str;     } 復制代碼 (3)在獲取下載圖片資源和文本內容資源方法都完成後,現在就可以開始下載任務了,為了防止等待效應,一般采用異步任務來下載網絡資源。   對對應的下載資源任務封裝各自的異步下載任務即可。下面就是實現異步下載任務的方案:   異步下載圖片任務:   復制代碼 private class DownloadImageTask extends AsyncTask<String, Bitmap, Long>{                             long imagesCount = 0;         ProgressBar progressBar;         public DownloadImageTask(ProgressBar pBar){             this.progressBar = pBar;         }                  @Override         protected Long doInBackground(String... urls) {             // TODO Auto-generated method stub             for(int i = 0; i < urls.length;i++){                 Bitmap imageDownloaded = downloadImage(urls[i]);                 if(imageDownloaded!=null){                     imagesCount ++;                     publishProgress(imageDownloaded);                     try {                         Thread.sleep(300);                     } catch (InterruptedException e) {                         // TODO Auto-generated catch block                         e.printStackTrace();                     }                 }                              }             return imagesCount;                      }         //display the image downloaded         @Override         protected void onProgressUpdate(Bitmap... bitmaps) {             // TODO Auto-generated method stub             ivImg.setImageBitmap(bitmaps[0]);             progressBar.setProgress((int) imagesCount*10);         }         //when all the images have been downloaded         @Override         protected void onPostExecute(Long imageDownloaded) {             // TODO Auto-generated method stub             String str = "下載完成!一共下載了"+imagesCount +"張圖片";             Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show();         }              } 復制代碼     異步下載文本文件內容任務:   復制代碼 private class DownloadTextTask extends AsyncTask<String, Void, String>{           @Override         protected void onPostExecute(String result) {             // TODO Auto-generated method stub             Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();         }           @Override         protected String doInBackground(String... urls) {             // TODO Auto-generated method stub             return downloadText(urls[0]);         }              } 復制代碼 這樣一來,異步下載網絡資源就完成了。   下面為了讀者方便測試,下面提供本文實例代碼中的相關網絡資源URL,以方便大家自己測試使用。其余非核心代碼就不在貼出來,望讀者見諒。   復制代碼 //圖片下載URLs private String[] mUrl =         {             "http://images.cnitblog.com/i/322919/201405/181111308592436.png",             "http://images.cnitblog.com/i/322919/201405/181111385003770.png",             "http://images.cnitblog.com/i/322919/201405/181111493901865.png",             "http://images.cnitblog.com/i/322919/201405/181111550463327.png",             "http://images.cnitblog.com/i/322919/201405/181117587961455.png",             "http://images.cnitblog.com/i/322919/201405/181118041251414.png",             "http://images.cnitblog.com/i/322919/201405/181119313754936.png",             "http://images.cnitblog.com/i/322919/201405/181119357816682.png",             "http://images.cnitblog.com/i/322919/201405/181119458753432.png",             "http://images.cnitblog.com/i/322919/201405/181119499372608.png",             "http://images.cnitblog.com/i/322919/201405/181120173901329.png",             "http://images.cnitblog.com/i/322919/201405/181120244849561.png",             "http://images.cnitblog.com/i/322919/201405/181120357812013.png",             "http://images.cnitblog.com/i/322919/201405/181120398596959.png"         }; progressBar = (ProgressBar) findViewById(R.id.progressBar); progressBar.setMax(mUrl.length*10); progressBar.setVisibility(View.VISIBLE); //異步下載圖片任務 DownloadImageTask task = new DownloadImageTask(progressBar); task.execute(mUrl); //文本文件URL String strUrl = "http://www.sogou.com/docs/about.htm";   //異步下載文本文件內容任務 new DownloadTextTask().execute(strUrl);
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved