Android下载网络图片资源
从网络下载图片资源在各种APP中很常见,比如很多APP都有广告轮番功能,这些广告图片通常是从服务器获取的,这里就需要从服务器上下载图片资源并显示。
一、获取网络图片并下载到本地:
代码:MainActivity.java:
package com.example.androidt11;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;public class MainActivity extends Activity {private EditText editText;private Button button;private ImageView imageView;private Bitmap bitmap;//手柄更新的作用Handler handler=new Handler(){public void handleMessage(Message msg) {if(msg.what==111){imageView.setImageBitmap(bitmap);}};};protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//初始化组件editText=(EditText) findViewById(R.id.imagepath);button=(Button) findViewById(R.id.upload);imageView=(ImageView) findViewById(R.id.imageView);//给下载按钮添加一个监听button.setOnClickListener(new OnClickListener() {public void onClick(View arg0) {new Thread(t).start();}});}//为了下载图片资源,开辟一个新的子线程Thread t=new Thread(){public void run() {//下载图片的路径String iPath=editText.getText().toString();try {//对资源链接URL url=new URL(iPath);//打开输入流InputStream inputStream=url.openStream();//对网上资源进行下载转换位图图片bitmap=BitmapFactory.decodeStream(inputStream);handler.sendEmptyMessage(111);inputStream.close();//再一次打开inputStream=url.openStream();File file=new File(Environment.getExternalStorageDirectory()+"/haha.gif");FileOutputStream fileOutputStream=new FileOutputStream(file);int hasRead=0;while((hasRead=inputStream.read())!=-1){fileOutputStream.write(hasRead);}fileOutputStream.close();inputStream.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}};};}
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><EditText android:id="@+id/imagepath"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png"/><Button android:id="@+id/upload"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下载"/><ImageView android:id="@+id/imageView"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>
这时查看SD卡根目录,会看到一个haha.gif的图片
效果图:
二、下载图片后显示在ListVIew中(更接近实际应用):
MainActivity.java:
package com.example.demo1;import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;public class MainActivity extends Activity {private ListView listView; //界面组件private Bitmap[] bitmaps; //定义一个位图数组,用来存放从网络下载下来的位图private ImageView[] images; //定义一个ImageView数组,用来存放位图数组中的位图图片//网络图片资源private String[] urls = {"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2720761512,1992761174&fm=26&gp=0.jpg","https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=401967138,750679164&fm=26&gp=0.jpg","https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1059486618,1562064036&fm=26&gp=0.jpg" };//使用handler更新UIHandler handler=new Handler(){public void handleMessage(Message msg) {if(msg.what==111){listView.setAdapter(new MyAdapter());}};};//继承BaseAdapterprivate class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return urls.length;}@Overridepublic Object getItem(int arg0) {return arg0;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, 100);images[arg0].setLayoutParams(layoutParams);return images[arg0];}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);bitmaps = new Bitmap[urls.length];images = new ImageView[urls.length];listView = (ListView) findViewById(R.id.listView);// 为了下载图片资源,开辟一个新的子线程new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < urls.length; i++) {// 下载图片的路径String iPath = urls[i];try {// 对资源链接URL url = new URL(iPath);// 打开输入流InputStream inputStream = url.openStream();// 对网上资源进行下载转换位图图片bitmaps[i] = BitmapFactory.decodeStream(inputStream);images[i] = new ImageView(MainActivity.this);images[i].setImageBitmap(bitmaps[i]);inputStream.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}handler.sendEmptyMessage(111);}}).start();}
}
xml文件里面仅一个ListView组件....
效果图:
Android下载网络图片资源相关推荐
- android 之使用多线程中的AsyncTask实现下载网络图片资源
前台显示: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...
- android 下载网络pdf文件后并显示
Demo下载地址:https://download.csdn.net/download/as425017946/10664926 1.基本思路: 打开网络pdf 思路整体还是来源与图片的加载. and ...
- android imageview 显示资源图片,ImageView显示网络图片资源
Android ImageView如何加载网络图片资源有些事,可以看透,但不要看破;有些人,可以看穿,但不要戳穿;有些话,能不说就沉默,藏在心里更适合;有些伤,能不揭就不提起,无声忘记更明智. 用im ...
- Android实现网络下载一(单任务下载--支持断点续传)
Android实现网络下载一(单任务下载–支持断点续传) 说起下载,在Android的一些类似游戏宝的项目中会频繁使用,比如说需求要下载一个apk文件,并且要支持暂停.继续等要求.当然在GitHib上 ...
- Android实现网络下载二(多任务下载--支持断点续传)
Android实现网络下载二(多任务下载–支持断点续传) 上文中说了单任务的断点续传,这篇文章就说说多任务下载,不啰嗦了,直接进入正题. 附上demo源码,GitHub代码后续上传,这里的链接还是cs ...
- Android加载网络图片资源
Android加载网络图片资源 获取图片资源 public static Bitmap getBitmap(String path) throws IOException {URL url = new ...
- Android中网络使用
Android中判断网络连接是否可用 一.判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { Connecti ...
- Android下载文件(一)下载进度断点续传
Android下载文件(一)下载进度&断点续传 索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)单任务多线程并发&断点续传(待续) Andro ...
- [工具库]JFileDownloader工具类——多线程下载网络文件,并保存在本地
本人大四即将毕业的准程序员(JavaSE.JavaEE.android等)一枚,小项目也做过一点,于是乎一时兴起就写了一些工具. 我会在本博客中陆续发布一些平时可能会用到的工具. 代码质量可能不是很好 ...
最新文章
- JS_高程6.面向对象的程序设计(2)创建对象_1
- python 报错 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd3 in position 解决方法
- 双向链表_如何通过Java单次查找链表的中间元素
- Java插件自动保存浏览器书签_多浏览器书签同步插件EverSync
- Teleport Pro使用教程
- php 迭代设计模式 -- BookList -- 分页
- XAMPP 使用教程
- 单行溢出隐藏没生效_至今没搞懂,为什么这个缸这么火?
- CSS content 属性 CSS counter-increment 属性 CSS counter-reset 属性
- python计算器外壳模板
- 黑苹果电池电量补丁_【黑苹果】用一次实战记录电池热补丁的编写方法
- dcm4che操作dcm文件
- 超好玩的css3-3d效果
- 为了寻找美,我决定对美女图片进行图像边缘化处理
- Webpack 5: The ‘compilation‘ argument must be an instance of Compilation
- java bigdecimal.round_down,java BigDecimal 的 setScale() 方法的 BigDecimal.ROUND_DOWN 舍入模式的BUG,坑...
- 关于gl_FragCoord的理解
- LCD高抗干扰液晶段码屏显示驱动芯片:VK2C21A/B/BA/C/D 大量应用于音箱/音响面板LCD显示驱动
- 和过去的自己写的告别信
- python课后感想_谈谈对Python的感想