Android下载网络图片资源
来源:互联网 发布:淘宝网开店怎么收费 编辑:程序博客网 时间:2024/05/22 15:31
从网络下载图片资源在各种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组件....
效果图:
阅读全文
1 0
- Android下载网络图片资源
- android下载网络图片
- Android 网络下载图片
- Android:下载网络图片
- Android 下载网络图片
- Android 下载网络图片
- Android学习篇章45-HttpClient网络下载-IO流传输-下载图片资源
- cocos2d-X 网络动态下载资源图片
- Android异步下载网络图片
- Android异步下载网络图片
- Android异步下载网络图片
- Android异步下载网络图片
- Android异步下载网络图片
- Android异步下载网络图片
- Android 多线程网络下载图片
- android 中下载网络图片
- Android异步下载网络图片
- Android Retrofit下载网络图片
- 二、hibernate提交事务
- MySQL知识总结
- SQL Server 学习笔记之约束
- 【IDE】Eclipse的工作空间与项目
- Java中SimpleDateFormat用法详解
- Android下载网络图片资源
- Android版本相机适配问题集合(不断整理更新中)
- EventBus源码解析04-取消订阅
- 红黑树
- SSH框架整合的其它方式
- Oracle Database 12c架构图
- 浅析栈帧
- 检测PC端和移动端的方法总结(转)
- 暑期学习 RNN 笔记