Android 下載網(wǎng)絡圖片并顯示到本地
Android下載網(wǎng)絡圖片的流程是:
發(fā)送網(wǎng)絡請求->將圖片以流的形式下載下來->將流轉換為Bitmap并賦給ImageView控件。
注意點
- 最新的Android系統(tǒng)不可以在主線程上請求網(wǎng)絡,需要使用線程來請求
- 下載圖片屬于耗時任務,最優(yōu)做法是放在一個AsyncTask中操作
設計思路
1.網(wǎng)絡請求:該例中需要下載的文件類型是圖片類型,可以將網(wǎng)絡請求獲取的數(shù)據(jù)類型轉換為Bitmap已供ImageView直接使用,但是一個合理的網(wǎng)絡請求類的設計是將下載的數(shù)據(jù)類型轉換為最基本的InputStream,這樣不管是下載圖片,音頻,文本還是視頻,都可以將結果拋出去讓上層的邏輯來處理。
2.異步請求:下載圖片,網(wǎng)絡下載屬于耗時操作,所以需要封裝一個AsyncTask來處理網(wǎng)絡請求,該請求繼承自Runnable接口。
3.異步回調:前臺需要通過回調的方式來得到圖片源,并將該圖片源賦值給ImageView.
相關代碼
NetService:網(wǎng)絡請求服務類
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;
}
/**
* 表示任務執(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:回調接口
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();
}
});
}
}
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- Android 網(wǎng)絡圖片查看顯示的實現(xiàn)方法
- Android讀取本地或網(wǎng)絡圖片并轉換為Bitmap
- Android 異步獲取網(wǎng)絡圖片并處理導致內存溢出問題解決方法
- Android顯示網(wǎng)絡圖片實例
- 簡單實現(xiàn)Android讀取網(wǎng)絡圖片到本地
- Android使用線程獲取網(wǎng)絡圖片的方法
- 在Android的應用中實現(xiàn)網(wǎng)絡圖片異步加載的方法
- Android實現(xiàn)網(wǎng)絡圖片瀏覽功能
- Android 讀取sdcard上的圖片實例(必看)
- Android sdcard實現(xiàn)圖片存儲 、聯(lián)網(wǎng)下載
- Android開發(fā)實現(xiàn)加載網(wǎng)絡圖片并下載至本地SdCard的方法
相關文章
Android開發(fā)教程之shape和selector的結合使用
shape和selector是Android UI設計中經(jīng)常用到的,比如我們要自定義一個圓角Button,點擊Button有些效果的變化,就要用到shape和selector,接下來通過本文給大家介紹Android開發(fā)教程之shape和selector的結合使用,感興趣的朋友一起學習吧2016-01-01
android用java和c實現(xiàn)查找sd卡掛載路徑(sd卡路徑)的方法
這篇文章主要介紹了android用java和c實現(xiàn)查找sd卡掛載路徑(sd卡路徑)的方法,需要的朋友可以參考下2014-02-02
Android系統(tǒng)狀態(tài)欄定制圖標顯示邏輯控制
這篇文章主要為大家介紹了Android系統(tǒng)狀態(tài)欄定制圖標顯示邏輯控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
Android ActionBarActivity設置全屏無標題的方法總結
這篇文章主要介紹了Android ActionBarActivity設置全屏無標題的相關資料,需要的朋友可以參考下2017-07-07
Android scrollTo和scrollBy方法使用解析
在一個View中,系統(tǒng)提供了scrollTo、scrollBy兩種方式來改變一個View的位置,下面通過本文給大家介紹Android scrollTo和scrollBy方法使用解析,需要的朋友參考下吧2018-01-01

