Android 下載網(wǎng)絡(luò)圖片并顯示到本地
Android下載網(wǎng)絡(luò)圖片的流程是:
發(fā)送網(wǎng)絡(luò)請求->將圖片以流的形式下載下來->將流轉(zhuǎn)換為Bitmap并賦給ImageView控件。
注意點
- 最新的Android系統(tǒng)不可以在主線程上請求網(wǎng)絡(luò),需要使用線程來請求
- 下載圖片屬于耗時任務(wù),最優(yōu)做法是放在一個AsyncTask中操作
設(shè)計思路
1.網(wǎng)絡(luò)請求:該例中需要下載的文件類型是圖片類型,可以將網(wǎng)絡(luò)請求獲取的數(shù)據(jù)類型轉(zhuǎn)換為Bitmap已供ImageView直接使用,但是一個合理的網(wǎng)絡(luò)請求類的設(shè)計是將下載的數(shù)據(jù)類型轉(zhuǎn)換為最基本的InputStream,這樣不管是下載圖片,音頻,文本還是視頻,都可以將結(jié)果拋出去讓上層的邏輯來處理。
2.異步請求:下載圖片,網(wǎng)絡(luò)下載屬于耗時操作,所以需要封裝一個AsyncTask來處理網(wǎng)絡(luò)請求,該請求繼承自Runnable接口。
3.異步回調(diào):前臺需要通過回調(diào)的方式來得到圖片源,并將該圖片源賦值給ImageView.
相關(guān)代碼
NetService:網(wǎng)絡(luò)請求服務(wù)類
public class NetService { public static InputStream getInputStreamByUrl(String address){ URL url = null; HttpURLConnection urlConnection = null; try { url = new URL(address); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(2 * 1000); urlConnection.setRequestMethod("GET"); return urlConnection.getInputStream(); } catch (IOException e) { e.printStackTrace(); } return null; } }
NetServiceTask:AsyncTask類
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import java.io.BufferedInputStream; import java.io.InputStream; public class NetServiceTask extends AsyncTask public NetServiceTask(String address, URLPostHandler urlPostHandler) { this.address=address; this.urlPostHandler=urlPostHandler; } /** * 表示任務(wù)執(zhí)行之前的操作 */ @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } /** * 主要是完成耗時的操作 */ @Override protected Bitmap doInBackground(String... arg0) { InputStream inputStream=NetService.getInputStreamByUrl(arg0[0]); if(inputStream!=null){ return BitmapFactory.decodeStream(new BufferedInputStream(inputStream)); } return null; } /** * 主要是更新UI的操作 */ @Override protected void onPostExecute(Bitmap result) { // TODO Auto-generated method stub super.onPostExecute(result); if(this.urlPostHandler!=null&&result!=null){ this.urlPostHandler.PostHandler(result); } } @Override public void run() { execute(this.address); } }
URLPostHandler:回調(diào)接口
public interface URLPostHandler { void PostHandler(Bitmap bitmap); }
前臺請求圖片并顯示到ImageView
public class MainActivity extends AppCompatActivity { Button buttonDownload; ImageView imageViewImg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonDownload = (Button) findViewById(R.id.buttonDownload); imageViewImg = (ImageView) findViewById(R.id.imageViewImg); buttonDownload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String address = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490783056273&di=6160d101d31dcf5f44b443ad9c5b2648&imgtype=0&src=http%3A%2F%2Fimg.sc115.com%2Fuploads%2Fallimg%2F110626%2F2011062622383898.jpg"; NetServiceTask netServerTask= new NetServiceTask(address,new URLPostHandler() { @Override public void PostHandler(Bitmap bitmap) { imageViewImg.setImageBitmap(bitmap); } }); Thread thread=new Thread(netServerTask); thread.start(); } }); } }
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- Android 網(wǎng)絡(luò)圖片查看顯示的實現(xiàn)方法
- Android讀取本地或網(wǎng)絡(luò)圖片并轉(zhuǎn)換為Bitmap
- Android 異步獲取網(wǎng)絡(luò)圖片并處理導(dǎo)致內(nèi)存溢出問題解決方法
- Android顯示網(wǎng)絡(luò)圖片實例
- 簡單實現(xiàn)Android讀取網(wǎng)絡(luò)圖片到本地
- Android使用線程獲取網(wǎng)絡(luò)圖片的方法
- 在Android的應(yīng)用中實現(xiàn)網(wǎng)絡(luò)圖片異步加載的方法
- Android實現(xiàn)網(wǎng)絡(luò)圖片瀏覽功能
- Android 讀取sdcard上的圖片實例(必看)
- Android sdcard實現(xiàn)圖片存儲 、聯(lián)網(wǎng)下載
- Android開發(fā)實現(xiàn)加載網(wǎng)絡(luò)圖片并下載至本地SdCard的方法
相關(guān)文章
基于Android中的 AutoCompleteTextView實現(xiàn)自動填充
本篇文章小編為大家介紹,基于Android中的 AutoCompleteTextView實現(xiàn)自動填充。需要的朋友參考下2013-04-04淺談Android客戶端與服務(wù)器的數(shù)據(jù)交互總結(jié)
這篇文章主要介紹了淺談Android客戶端與服務(wù)器的數(shù)據(jù)交互總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Android實現(xiàn)屏幕旋轉(zhuǎn)方法總結(jié)
這篇文章主要介紹了Android實現(xiàn)屏幕旋轉(zhuǎn)方法,實例總結(jié)了屏幕旋轉(zhuǎn)的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04Android基于TextView實現(xiàn)的跑馬燈效果實例
這篇文章主要介紹了Android基于TextView實現(xiàn)的跑馬燈效果,以完整實例形式分析了Android使用TextView通過屬性設(shè)置及功能代碼實現(xiàn)跑馬燈效果的相關(guān)技巧,需要的朋友可以參考下2016-02-02android獲取情景模式和鈴聲 實現(xiàn)震動、鈴聲提醒
這篇文章主要介紹了android獲取情景模式和鈴聲,實現(xiàn)震動、鈴聲提醒,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12Android apk 項目一鍵打包并上傳到蒲公英的實現(xiàn)方法
這篇文章主要介紹了Android apk 項目一鍵打包并上傳到蒲公英,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06