Android開發(fā)之異步獲取并下載網(wǎng)絡資源
來源:易賢網(wǎng) 閱讀:918 次 日期:2015-02-10 10:12:09
溫馨提示:易賢網(wǎng)小編為您整理了“Android開發(fā)之異步獲取并下載網(wǎng)絡資源”,方便廣大網(wǎng)友查閱!

1)從指定的URL獲取對應的流

既然要獲取網(wǎng)絡資源,那么首先得有個URL,那么這里我首先封裝一個打開URL連接獲取到的InputStream 流,這樣一來無論是圖片資源還是文本文件資源都可以使用該接口方法來獲取流。

該功能主要應用URLConnection和HttpURLConnection來實現(xiàn),具體實現(xiàn)方案如下:

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)封裝了上面的獲取流方法接口后,我們就可以利用上面封裝的方法來獲取并下載相應圖片和文本文件內(nèi)容了

獲取并下載圖片資源方法:

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;

}

獲取并下載文本內(nèi)容方法:

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)在獲取下載圖片資源和文本內(nèi)容資源方法都完成后,現(xiàn)在就可以開始下載任務了,為了防止等待效應,一般采用異步任務來下載網(wǎng)絡資源。

對對應的下載資源任務封裝各自的異步下載任務即可。下面就是實現(xiàn)異步下載任務的方案:

異步下載圖片任務:

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();

}

}

異步下載文本文件內(nèi)容任務:

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]);

}

}

這樣一來,異步下載網(wǎng)絡資源就完成了。

下面為了讀者方便測試,下面提供本文實例代碼中的相關(guān)網(wǎng)絡資源URL,以方便大家自己測試使用。其余非核心代碼就不在貼出來,望讀者見諒。

//圖片下載URLs

private String[] mUrl =

{

"",

""

};

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 = "";

//異步下載文本文件內(nèi)容任務

new DownloadTextTask().execute(strUrl);

更多信息請查看IT技術(shù)專欄

更多信息請查看數(shù)據(jù)庫
易賢網(wǎng)手機網(wǎng)站地址:Android開發(fā)之異步獲取并下載網(wǎng)絡資源
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇剩?/div>

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)