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组件....

效果图:


原创粉丝点击