最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 下載網(wǎng)絡(luò)圖片并顯示到本地

 更新時(shí)間:2017年03月31日 08:42:54   作者:玉杰365  
本文主要介紹了Android實(shí)現(xiàn)下載網(wǎng)絡(luò)圖片并顯示到本地功能的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧

Android下載網(wǎng)絡(luò)圖片的流程是:

發(fā)送網(wǎng)絡(luò)請(qǐng)求->將圖片以流的形式下載下來(lái)->將流轉(zhuǎn)換為Bitmap并賦給ImageView控件。

注意點(diǎn)

  • 最新的Android系統(tǒng)不可以在主線(xiàn)程上請(qǐng)求網(wǎng)絡(luò),需要使用線(xiàn)程來(lái)請(qǐng)求
  • 下載圖片屬于耗時(shí)任務(wù),最優(yōu)做法是放在一個(gè)AsyncTask中操作

設(shè)計(jì)思路

1.網(wǎng)絡(luò)請(qǐng)求:該例中需要下載的文件類(lèi)型是圖片類(lèi)型,可以將網(wǎng)絡(luò)請(qǐng)求獲取的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為Bitmap已供ImageView直接使用,但是一個(gè)合理的網(wǎng)絡(luò)請(qǐng)求類(lèi)的設(shè)計(jì)是將下載的數(shù)據(jù)類(lèi)型轉(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ù)類(lèi)

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類(lèi)

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://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();
 }
 });
}
}

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • Android幀率監(jiān)測(cè)與優(yōu)化技巧

    Android幀率監(jiān)測(cè)與優(yōu)化技巧

    Android 應(yīng)用的性能優(yōu)化是開(kāi)發(fā)過(guò)程中至關(guān)重要的一環(huán),而幀率(Frame Rate)是評(píng)估應(yīng)用性能的一個(gè)關(guān)鍵指標(biāo),在本文中,我們將深入探討如何監(jiān)測(cè) Android 應(yīng)用的幀率,以及如何通過(guò)代碼示例來(lái)優(yōu)化應(yīng)用的性能,需要的朋友可以參考下
    2023-10-10
  • Android開(kāi)發(fā)教程之shape和selector的結(jié)合使用

    Android開(kāi)發(fā)教程之shape和selector的結(jié)合使用

    shape和selector是Android UI設(shè)計(jì)中經(jīng)常用到的,比如我們要自定義一個(gè)圓角Button,點(diǎn)擊Button有些效果的變化,就要用到shape和selector,接下來(lái)通過(guò)本文給大家介紹Android開(kāi)發(fā)教程之shape和selector的結(jié)合使用,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • android用java和c實(shí)現(xiàn)查找sd卡掛載路徑(sd卡路徑)的方法

    android用java和c實(shí)現(xiàn)查找sd卡掛載路徑(sd卡路徑)的方法

    這篇文章主要介紹了android用java和c實(shí)現(xiàn)查找sd卡掛載路徑(sd卡路徑)的方法,需要的朋友可以參考下
    2014-02-02
  • Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制

    Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制

    這篇文章主要為大家介紹了Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Android選項(xiàng)菜單用法實(shí)例分析

    Android選項(xiàng)菜單用法實(shí)例分析

    這篇文章主要介紹了Android選項(xiàng)菜單用法,以完整實(shí)例形式較為詳細(xì)分析了Android選項(xiàng)菜單的布局及功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Android ActionBarActivity設(shè)置全屏無(wú)標(biāo)題的方法總結(jié)

    Android ActionBarActivity設(shè)置全屏無(wú)標(biāo)題的方法總結(jié)

    這篇文章主要介紹了Android ActionBarActivity設(shè)置全屏無(wú)標(biāo)題的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Android scrollTo和scrollBy方法使用解析

    Android scrollTo和scrollBy方法使用解析

    在一個(gè)View中,系統(tǒng)提供了scrollTo、scrollBy兩種方式來(lái)改變一個(gè)View的位置,下面通過(guò)本文給大家介紹Android scrollTo和scrollBy方法使用解析,需要的朋友參考下吧
    2018-01-01
  • 深入理解Kotlin的泛型系統(tǒng)

    深入理解Kotlin的泛型系統(tǒng)

    Kotlin 泛型即 “參數(shù)化類(lèi)型”,將類(lèi)型參數(shù)化,可以用在類(lèi),接口,方法上。下面 這篇文章主要給大家介紹了關(guān)于Kotlin泛型系統(tǒng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • Android精靈動(dòng)畫(huà)用法實(shí)例

    Android精靈動(dòng)畫(huà)用法實(shí)例

    這篇文章主要介紹了Android精靈動(dòng)畫(huà)用法,實(shí)例分析了Android動(dòng)畫(huà)的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • 圖文詳解Flutter單例的實(shí)現(xiàn)

    圖文詳解Flutter單例的實(shí)現(xiàn)

    一個(gè)類(lèi)只允許創(chuàng)建一個(gè)實(shí)例,那這個(gè)類(lèi)就是一個(gè)單例類(lèi),這種設(shè)計(jì)模式就叫作單例設(shè)計(jì)模式,簡(jiǎn)稱(chēng)單例模式,下面這篇文章主要給大家介紹了關(guān)于Flutter單例的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2021-12-12

最新評(píng)論

和硕县| 乌兰浩特市| 汉川市| 辛集市| 灵丘县| 长岛县| 蒙自县| 贡嘎县| 九江市| 博白县| 乌鲁木齐县| 长垣县| 苏尼特右旗| 阿鲁科尔沁旗| 青岛市| 易门县| 雷波县| 萨迦县| 曲靖市| 会理县| 麻阳| 鸡泽县| 山东| 确山县| 阜城县| 中方县| 长泰县| 贵溪市| 桐梓县| 文安县| 盘山县| 巢湖市| 三门县| 巍山| 泰宁县| 清原| 湖州市| 莆田市| 内黄县| 铜陵市| 铜山县|