日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发-下载网络图片并显示到本地

發(fā)布時間:2024/8/26 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发-下载网络图片并显示到本地 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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<String, Void, Bitmap> implements Runnable{
private String address;
private URLPostHandler urlPostHandler = null;

public NetServiceTask(String address, URLPostHandler urlPostHandler) {this.address=address;this.urlPostHandler=urlPostHandler; }/*** 表示任務(wù)執(zhí)行之前的操作*/ @Override protected void onPreExecute() {// TODO Auto-generated method stubsuper.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 stubsuper.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() {@Overridepublic 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() {@Overridepublic void PostHandler(Bitmap bitmap) {imageViewImg.setImageBitmap(bitmap);}});Thread thread=new Thread(netServerTask);thread.start();}}); }

}

轉(zhuǎn)載于:https://www.cnblogs.com/yujie365/p/6647245.html

總結(jié)

以上是生活随笔為你收集整理的Android开发-下载网络图片并显示到本地的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。