將圖片以流的形式下載下來(lái)->將流轉(zhuǎn)換為Bitmap并賦給ImageView控件。 注意點(diǎn) 最新的Android系統(tǒng)不可以在主線程..."/>
您好,登錄后才能下訂單哦!
Android下載網(wǎng)絡(luò)圖片的流程是:
發(fā)送網(wǎng)絡(luò)請(qǐng)求->將圖片以流的形式下載下來(lái)->將流轉(zhuǎn)換為Bitmap并賦給ImageView控件。
注意點(diǎn)
設(shè)計(jì)思路
1.網(wǎng)絡(luò)請(qǐng)求:該例中需要下載的文件類型是圖片類型,可以將網(wǎng)絡(luò)請(qǐng)求獲取的數(shù)據(jù)類型轉(zhuǎn)換為Bitmap已供ImageView直接使用,但是一個(gè)合理的網(wǎng)絡(luò)請(qǐng)求類的設(shè)計(jì)是將下載的數(shù)據(jù)類型轉(zhuǎn)換為最基本的InputStream,這樣不管是下載圖片,音頻,文本還是視頻,都可以將結(jié)果拋出去讓上層的邏輯來(lái)處理。
2.異步請(qǐng)求:下載圖片,網(wǎng)絡(luò)下載屬于耗時(shí)操作,所以需要封裝一個(gè)AsyncTask來(lái)處理網(wǎng)絡(luò)請(qǐng)求,該請(qǐng)求繼承自Runnable接口。
3.異步回調(diào):前臺(tái)需要通過(guò)回調(diào)的方式來(lái)得到圖片源,并將該圖片源賦值給ImageView.
相關(guān)代碼
NetService:網(wǎng)絡(luò)請(qǐng)求服務(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(); } /** * 主要是完成耗時(shí)的操作 */ @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); }
前臺(tái)請(qǐng)求圖片并顯示到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://cache.yisu.com/upload/information/20200623/125/131904.html"; NetServiceTask netServerTask= new NetServiceTask(address,new URLPostHandler() { @Override public void PostHandler(Bitmap bitmap) { imageViewImg.setImageBitmap(bitmap); } }); Thread thread=new Thread(netServerTask); thread.start(); } }); } }
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持億速云!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。