国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 下載網絡圖片并顯示到本地

2019-12-12 03:13:15
字體:
來源:轉載
供稿:網友

Android下載網絡圖片的流程是:

發送網絡請求->將圖片以流的形式下載下來->將流轉換為Bitmap并賦給ImageView控件。

注意點

  • 最新的Android系統不可以在主線程上請求網絡,需要使用線程來請求
  • 下載圖片屬于耗時任務,最優做法是放在一個AsyncTask中操作

設計思路

1.網絡請求:該例中需要下載的文件類型是圖片類型,可以將網絡請求獲取的數據類型轉換為Bitmap已供ImageView直接使用,但是一個合理的網絡請求類的設計是將下載的數據類型轉換為最基本的InputStream,這樣不管是下載圖片,音頻,文本還是視頻,都可以將結果拋出去讓上層的邏輯來處理。

2.異步請求:下載圖片,網絡下載屬于耗時操作,所以需要封裝一個AsyncTask來處理網絡請求,該請求繼承自Runnable接口。

3.異步回調:前臺需要通過回調的方式來得到圖片源,并將該圖片源賦值給ImageView.

相關代碼

NetService:網絡請求服務類

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 AsyncTaskpublic NetServiceTask(String address, URLPostHandler urlPostHandler) { this.address=address; this.urlPostHandler=urlPostHandler;}/** * 表示任務執行之前的操作 */@Overrideprotected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute();}/** * 主要是完成耗時的操作 */@Overrideprotected Bitmap doInBackground(String... arg0) { InputStream inputStream=NetService.getInputStreamByUrl(arg0[0]); if(inputStream!=null){  return BitmapFactory.decodeStream(new BufferedInputStream(inputStream)); } return null;}/** * 主要是更新UI的操作 */@Overrideprotected void onPostExecute(Bitmap result) { // TODO Auto-generated method stub super.onPostExecute(result); if(this.urlPostHandler!=null&&result!=null){  this.urlPostHandler.PostHandler(result); }}@Overridepublic void run() { execute(this.address);}}

URLPostHandler:回調接口

public interface URLPostHandler {void PostHandler(Bitmap bitmap);}

前臺請求圖片并顯示到ImageView

public class MainActivity extends AppCompatActivity {Button buttonDownload;ImageView imageViewImg;@Overrideprotected 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(); } });}}

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太仓市| 衡水市| 丹寨县| 青铜峡市| 香港 | 长治市| 淮北市| 平定县| 洛川县| 浦东新区| 南部县| 保山市| 鸡泽县| 罗田县| 千阳县| 巴塘县| 普兰县| 潮州市| 营口市| 赣榆县| 麟游县| 临清市| 秦皇岛市| 花莲市| 凤山县| 福建省| 兴海县| 齐河县| 类乌齐县| 宁河县| 扎赉特旗| 湘潭县| 永吉县| 漠河县| 濉溪县| 凭祥市| 读书| 上栗县| 洪江市| 行唐县| 双鸭山市|