Android下載網絡圖片的流程是:
發送網絡請求->將圖片以流的形式下載下來->將流轉換為Bitmap并賦給ImageView控件。
注意點
設計思路
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(); } });}}以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!
新聞熱點
疑難解答