91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-16 13:40:22 來源:腳本之家 閱讀:325 作者:玉杰365 欄目:移動開發

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 AsyncTask
public NetServiceTask(String address, URLPostHandler urlPostHandler) {
 this.address=address;
 this.urlPostHandler=urlPostHandler;
}
/**
 * 表示任務執行之前的操作
 */
@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://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();
 }
 });
}
}

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂州市| 安宁市| 五指山市| 阜南县| 敖汉旗| 临猗县| 金秀| 凤庆县| 内乡县| 海盐县| 仲巴县| 顺昌县| 常宁市| 玉树县| 娄烦县| 孝昌县| 措美县| 黔南| 元朗区| 永修县| 扶沟县| 会同县| 乐业县| 新郑市| 邵阳市| 五河县| 大丰市| 临汾市| 仁怀市| 三门峡市| 遂昌县| 阿巴嘎旗| 边坝县| 金山区| 嵩明县| 郎溪县| 屯留县| 利津县| 页游| 泗洪县| 桐梓县|