一、布局文件

设置界面,添加一个ImageView,和两个Button按钮,设置其属性及id

 <ImageView
android:id="@+id/ImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#ffffff" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
>
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="下载图片"
/> <Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_toRightOf="@+id/bt1" android:text="读取图片"
/>

二、声明网络权限

因为使用网络功能需要添加权限,修改AndroidManifest.xml文件添加权限声明语句。

 <uses-permission android:name="android.permission.INTERNET"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.httpexe">
<uses-permission android:name="android.permission.INTERNET"/> </manifest>

三、编辑ManActivity.java文件。

import...//import语句自动生成,略
public class MainActivity extends AppCompatActivity { ImageView imageView;
Button button;
Button button1; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.ImageView);
button = (Button) findViewById(R.id.bt1);
button1=(Button)findViewById(R.id.bt2); button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyTask task = new MyTask();//创建异步任务对象
task.execute("https://www.baidu.com/img/bd_logo1.png");//创建下载任务
}
});
button1.setOnClickListener(new View.OnClickListener() {//读取图片 @Override
public void onClick(View v) {
Bitmap bmp=null;
try{
FileInputStream fis= openFileInput("a.png");
bmp=BitmapFactory.decodeStream(fis);
if(bmp!=null) {
imageView.setImageBitmap(bmp);
}
}catch (Exception ex) {
}
}
});
}
public class MyTask extends AsyncTask<String, Void, Bitmap> { //bmp位图,泛型
@Override
protected Bitmap doInBackground(String... params) { //真正的下载
String urlStr = params[0]; //取第一个变参
Bitmap bmp = null;
try {
URL url = new URL(urlStr);
bmp=BitmapFactory.decodeStream(url.openStream()); //位图工厂,返回bitmap
InputStream is= url.openStream();
byte[] buffer=new byte[4096];//byte[]缓冲区
FileOutputStream fos= MainActivity.this.openFileOutput("a.png",MainActivity.MODE_PRIVATE);
int hasRead=is.read(buffer);
while (hasRead>0){
fos.write(buffer,0,hasRead);//文件大小,起始位置,读取的量
hasRead=is.read(buffer);
}
fos.close();//关闭
is.close();//关闭
}
catch (Exception ex) {
}finally {
}
return bmp;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
}
}
}

 四、运行结果

点击下载按钮下载图片。读取图片按钮的作用:下载一次后,不需要重新下载

小记:

java代码输入时有些会自动弹出,并匹配到相应包,直接贴会有报错。

androidj基础:从网上下载图片的更多相关文章

  1. 【转】java URLConnection从网上下载图片或音乐

    try { //根据String形式创建一个URL对象,   URL url = new URL("http://www.baidu.com");   //实列一个URLconne ...

  2. nodejs 网上下载图片到本地,并判断图片路径是否存在

    var http = require("http"); var fs = require("fs"); var server = http.createServ ...

  3. [C#基础实例]指定地址解析图片并下载

    需求:查找页面图片并下载至本地: 实现: 首先:读取通过网络html内容,并用正则表达式查找图片地下. 其次:使用WebRequest.Create创建图片请求. 最后:把获取图片网络流数据通过Fil ...

  4. python下载图片超时的调查

    在使用python3下载图片时, 常用的方法有urlretrieve和requests两种, 不管哪种方法在网速极慢的情况下, 会出现图片下载卡住现象.那如何解决呢? 小编根据网上提供的资料测试了几种 ...

  5. 用Scrapy爬虫下载图片(豆瓣电影图片)

    用Scrapy爬虫的安装和入门教程,这里有,这篇链接的博客也是我这篇博客的基础. 其实我完全可以直接在上面那篇博客中的代码中直接加入我要下载图片的部分代码的,但是由于上述博客中的代码已运行,已爬到快九 ...

  6. android 73 下载图片

    package com.ithiema.imageviewer; import java.io.InputStream; import java.net.HttpURLConnection; impo ...

  7. Android采用HttpClient下载图片

    在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...

  8. 织梦cms网上复制图片不可用的解决方法

    背景描述: 织梦cms采集图片集时, 需要使用织梦cms提供的"网上复制图片"的功能, 好像我这里这个功能一直不可用, 今天下定决心研究了下源代码并进行了适当修改, 将我的修改提供 ...

  9. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片

    摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...

随机推荐

  1. vue实现部分页面导入底部 vue配置公用头部、底部,可控制显示隐藏

    vue实现部分页面导入底部 vue配置公用头部.底部,可控制显示隐藏 在app.vue文件里引入公共的header 和 footer header 和 footer 默认显示,例如某个页面不需要显示h ...

  2. spring mvc 传入中文参数乱码问题解决

    一个简单的学习springmvc的demo中,当http请求传入中文参数时,在controller中接受到的参数就已经是乱码了,经百度一番解决方案如下: 1. get请求方式乱码解决 对于get方式, ...

  3. SQL Server does not purge row versioning records even the transaction are committed if there are other open transaction running in the databases with read-committed snapshot enabled .

    This is a by-design behavior. There is only one allocation unit in tempdb that istracking the versio ...

  4. JVM系列——从菜鸟到入门

    持续更新系列. 参考自<深入理解Java虚拟机>.<Java性能权威指南>.<分布式Java应用基础与实践>. Java的内存结构 JVM系列——运行时数据区 JV ...

  5. Build GMP on 64bit Windows

    1.MSYS2 环境搭建 1.1.安装 msys2 的主页地址: http://www.msys2.org/ 下载32位或64位,我这里 下载了64位 msys2-x86_64-20161025.ex ...

  6. Hadoop、Spark 集群环境搭建问题汇总

    Hadoop 问题1: Hadoop Slave节点 NodeManager 无法启动 解决方法: yarn-site.xml reducer取数据的方式是mapreduce_shuffle 问题2: ...

  7. 加入ffmpeg播放视屏

    下面的字反了..,另外没声音 2018-4-28 前段时间已经做的差不多了,音频的pack取出来用openAL播放,并实现了视屏同步播放,并且支持unity 现在的问题就是支持大分辨率视屏播放的问题, ...

  8. windows 安装python pip Could not install packages due to anEnvironmentError: [WinError 5] 拒绝访问

    找打 C:\Windows\System32 文件夹下面的cmd.exe点开后运行python -m pip install --upgrade pip 即解决问题了.

  9. laravel5.8笔记二:部署

    部署项目之前需要知道的几件事 1.有几个模块(admin,index,wap,api) 2.有几个数据库(mysql1,mysql2,mysql3) 3.有那些缓存(redis1,redis2,red ...

  10. String 源码探究

    起因:忽然想到平时用的HashMap 当key是字符串的时候为什么总可以覆盖,然后看了String的源码发现: private final char value[]; private int hash ...