萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> 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.LEN
copyright © 萬盛學電腦網 all rights reserved