androidj基础:从网上下载图片
一、布局文件
设置界面,添加一个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基础:从网上下载图片的更多相关文章
- 【转】java URLConnection从网上下载图片或音乐
try { //根据String形式创建一个URL对象, URL url = new URL("http://www.baidu.com"); //实列一个URLconne ...
- nodejs 网上下载图片到本地,并判断图片路径是否存在
var http = require("http"); var fs = require("fs"); var server = http.createServ ...
- [C#基础实例]指定地址解析图片并下载
需求:查找页面图片并下载至本地: 实现: 首先:读取通过网络html内容,并用正则表达式查找图片地下. 其次:使用WebRequest.Create创建图片请求. 最后:把获取图片网络流数据通过Fil ...
- python下载图片超时的调查
在使用python3下载图片时, 常用的方法有urlretrieve和requests两种, 不管哪种方法在网速极慢的情况下, 会出现图片下载卡住现象.那如何解决呢? 小编根据网上提供的资料测试了几种 ...
- 用Scrapy爬虫下载图片(豆瓣电影图片)
用Scrapy爬虫的安装和入门教程,这里有,这篇链接的博客也是我这篇博客的基础. 其实我完全可以直接在上面那篇博客中的代码中直接加入我要下载图片的部分代码的,但是由于上述博客中的代码已运行,已爬到快九 ...
- android 73 下载图片
package com.ithiema.imageviewer; import java.io.InputStream; import java.net.HttpURLConnection; impo ...
- Android采用HttpClient下载图片
在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...
- 织梦cms网上复制图片不可用的解决方法
背景描述: 织梦cms采集图片集时, 需要使用织梦cms提供的"网上复制图片"的功能, 好像我这里这个功能一直不可用, 今天下定决心研究了下源代码并进行了适当修改, 将我的修改提供 ...
- .net mvc + layui做图片上传(二)—— 使用流上传和下载图片
摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...
随机推荐
- OpenCV 学习笔记 07 支持向量机SVM(flag)
1 SVM 基本概念 本章节主要从文字层面来概括性理解 SVM. 支持向量机(support vector machine,简SVM)是二类分类模型. 在机器学习中,它在分类与回归分析中分析数据的监督 ...
- HighLight.js 使用Demo
复制下面代码,保存为html,浏览器打开预览即可. <!DOCTYPE html> <html> <head> <meta charset="utf ...
- Linux内核剖析(四)为arm内核构建源码树
前面说到要做linux底层开发或者编写Linux的驱动,必须建立内核源码树,之前我们提到过在本机上构建源码树—-Linux内核剖析(三),其建立的源码树是针对i686平台的,但是我么嵌入式系统用的是a ...
- Atitit php java python nodejs错误日志功能的比较
Atitit php java python nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...
- 如何在宿主机上查看kvm虚拟机的IP
# arp -a ? (:3c:ce::f2: [ether] on br0 gateway (:c8:ac:d5 [ether] on br0 ? (:d4:fc: [ether] on br0 ? ...
- 深入分析 ThreadLocal
ThreadLoacal是什么? ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关.ThreadLocal虽然 ...
- ie11开发者模式打开空白
Internet选项——高级——取消 禁用脚本调试(Internet explorpr)
- React Native 从入门到原理一
React Native 从入门到原理一 React Native 是最近非常火的一个话题,介绍如何利用 React Native 进行开发的文章和书籍多如牛毛,但面向入门水平并介绍它工作原理的文章却 ...
- Iterator和ListIterator
Iterator和ListIterator主要区别有: 一.ListIterator有add()方法,可以向List中添加对象,而Iterator不能. 二.ListIterator和Iterator ...
- php utf8编码字符串的截取
function sub_str($str, $length = 0, $append = true) { $str = trim($str); $strlength = strlen($str); ...