下载操作相关代码:

  1. package liudeli.async;
  2.  
  3. import android.app.Activity;
  4.  
  5. import android.app.ProgressDialog;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.os.Bundle;
  9. import android.os.Handler;
  10. import android.os.Message;
  11. import android.view.View;
  12. import android.widget.ImageView;
  13. import android.widget.Toast;
  14.  
  15. import java.io.InputStream;
  16. import java.net.HttpURLConnection;
  17.  
  18. import java.net.URL;
  19.  
  20. public class MainActivity3 extends Activity {
  21.  
  22. // 图片地址
  23. private final String PATH = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000" +
  24. "&sec=1544714792699&di=3c2de372608ed6323f583f1c1b445e51&imgtype=0&src=http%3A%2F%2Fp" +
  25. "2.qhimgs4.com%2Ft0105d27180a686e91f.jpg";
  26.  
  27. // 成功标识
  28. private final int SUCCESS = 200;
  29.  
  30. // 失败标识
  31. private final int ERROR = 404;
  32.  
  33. private ImageView imageView;
  34.  
  35. @Override
  36. protected void onCreate(Bundle savedInstanceState) {
  37. super.onCreate(savedInstanceState);
  38.  
  39. setContentView(R.layout.activity_main3);
  40.  
  41. imageView = findViewById(R.id.iv_image);
  42. }
  43.  
  44. /**
  45. * 定义Handler,用于接收子线程发过来的信息
  46. */
  47. private Handler mHandler = new Handler(){
  48. @Override
  49. public void handleMessage(Message msg) {
  50. super.handleMessage(msg);
  51. switch (msg.what) {
  52. case SUCCESS:
  53. imageView.setImageBitmap((Bitmap) msg.obj);
  54. break;
  55. case ERROR:
  56. Toast.makeText(MainActivity3.this, "下载失败,请检查原因", Toast.LENGTH_LONG).show();
  57. break;
  58. }
  59.  
  60. if (null != progressDialog)
  61. progressDialog.dismiss();
  62. }
  63. };
  64.  
  65. private ProgressDialog progressDialog = null;
  66.  
  67. /**
  68. * 获取图片 按钮
  69. * @param view
  70. */
  71. public void getImage(View view) {
  72. progressDialog = new ProgressDialog(MainActivity3.this);
  73. progressDialog.setMessage("正在下载...");
  74. progressDialog.show();
  75.  
  76. // 开启子线程 下载图片
  77. /**
  78. * 执行此方法才去启动线程下载
  79. */
  80. new Thread(new DownloadImage()).start();
  81. }
  82.  
  83. class DownloadImage implements Runnable {
  84.  
  85. /**
  86. * 发送Handler
  87. */
  88. public void showUiImage(int responseCode, Bitmap bitmap) {
  89. Message message = mHandler.obtainMessage(responseCode); // 拿系统消息池的消息, 不要 new Message();
  90. message.obj = bitmap;
  91. mHandler.sendMessageDelayed(message, 2000);
  92. }
  93.  
  94. @Override
  95. public void run() {
  96. try {
  97. // 封装成网络地址
  98. URL url = new URL(PATH);
  99.  
  100. // 打开一个连接
  101. HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
  102.  
  103. // 设置连接时长
  104. httpURLConnection.setConnectTimeout(5000);
  105.  
  106. // 设置请求方式
  107. httpURLConnection.setRequestMethod("GET");
  108.  
  109. /**
  110. * 注意:⚠️ 不要肤浅的任务 打开连接对象 设置连接时长 设置请求方式 就向服务器发送Http请求了
  111. * 是要执行httpURLConnection.getResponseCode()才会向服务器发送Http请求
  112. */
  113. if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
  114. // 得到服务器返回过来的流对象
  115. InputStream inputStream = httpURLConnection.getInputStream();
  116. Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
  117. showUiImage(SUCCESS, bitmap);
  118. } else {
  119. showUiImage(ERROR, null);
  120. }
  121.  
  122. } catch (Exception e) {
  123. e.printStackTrace();
  124. showUiImage(ERROR, null);
  125. }
  126. }
  127. }
  128. }

Layout:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6.  
  7. <Button
  8. android:id="@+id/bt_get_image"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="获取图片"
  12. android:onClick="getImage"
  13. />
  14.  
  15. <ImageView
  16. android:id="@+id/iv_image"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:layout_below="@id/bt_get_image" />
  20.  
  21. </RelativeLayout>

AndroidManifest.xml 配置网络权限:

  1. <uses-permission android:name="android.permission.INTERNET" />

Android-下载网上图片的更多相关文章

  1. Android 下载文件及写入SD卡

    Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  2. Android 下载模块分析(DownloadManager和DownloadProvider)

    Android下载模块主要有2个部分组成:DownloadManager和DownloadProvider:其中DownloadManager提供接口供调用,具体的实现是 DownloadProvid ...

  3. Android下载更新代码

    其实是昨天反编译一个apk,给它添加一个自动更新的功能用到的.为了在smali下方便查看,代码写的不规范,反正到了smali都一个吊样~~~~ 权限: <uses-permission andr ...

  4. android 下载文件,file的读写应用

    先看代码: public class MainActivity extends AppCompatActivity { String TAG = MainActivity.class.getCanon ...

  5. Android下载图片/调用系统相机拍照、显示并保存到本地

    package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException ...

  6. Android下载更新的安装包以及九宫格界面

    继上篇博客,我接下来做的是一个九宫格界面,但是对之前的Splash页面我还有要说的就是,当出现网络异常.json解析异常或者没有更新的时候,我们都必须要跳转到我们的主页面,因为Splash页面仅是展示 ...

  7. android 下载文件

    import com.example.android.R; import android.app.Activity;import android.os.Bundle;import android.os ...

  8. Android 下载网络图片保存到本地

    通过网络地址获取网络图片,点击下载将图片显示出来,然后点击图片将图片保存到本地. 首先需要在manifest上添加一些权限: <!-- 访问网络的权限 --> <uses-permi ...

  9. android下载简单工具类

    功能是实现下载文件,图片或MP3等,为了简单起见使用单线程,此代码为MarsAndroid教程的复制品,放在此处,留着参考. 首先是一个得到字节流随后保存到内存卡上的工具类: package com. ...

  10. Android 下载文件 显示进度条

    加入两个权限 一个是联网,另一个是读写SD卡 <uses-permission android:name="android.permission.INTERNET">& ...

随机推荐

  1. leetcode162

    class Solution { public: int findPeakElement(vector<int>& nums) { int n = nums.size(); ) { ...

  2. tornado 之 异步非阻塞

    异步非阻塞 1.基本使用 装饰器 + Future 从而实现Tornado的异步非阻塞 import tornado.web import tornado.ioloop from tornado im ...

  3. U盘安装centos7.1出现dracut问题的超简单解决方法

    恰好今天有空,于是抽空回忆一下之前U盘安装CENTOS7时遇到的一个大坑.U盘装系统习惯了,就顺手用大白菜工具刻了一个CentOS 7.1的minimun ISO镜像到U盘,于是噩梦开始了.如果有人像 ...

  4. Alternative PHP Cache ( APC )

    简介: Alternative PHP Cache (APC) 是一个开放自由的PHP opcode 缓存.它的目标是提供一个自由.开放和健全的框架用于缓存和优化 PHP 的中间代码,加快 PHP 执 ...

  5. 【&nbsp;Makefile&nbsp;编程基础之…

    本站文章均为李华明Himi原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/766.html 概述: ...

  6. Hash表算法详解

    Hash表定义 散列表(Hash table,也叫哈希表),是根据关键字值(Key value)直接进行访问的数据结构.也就是说,它通过把关键字(关键字通过Hash算法生成)映射到表中一个位置来访问记 ...

  7. nginx 真实ip

    server { listen       80; server_name  localhost; location /{ root   html; index  index.html index.h ...

  8. C#的ComboBox学习使用2018.08.03

    ComboBox是一个有下拉列表的文本显示框,其text为当前的文本,item属性为项 comboBox1.Items.Add("); id = comboBox1.Text; 可以采用se ...

  9. Listview getItemViewType的使用

    ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...

  10. SQL Compare数据库版本比较工具

    Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程 Red Gate系列之二 SQL Source C ...