Android读取网络图片到本地的简约的实现

标签: android 网络 图片 imageview
7306人阅读 评论(0) 收藏 举报

今天在网上看到了一个关于读取网络文件的小视频,觉得不错,拿来与大家分享


思路


具体的思路比较的简单,但是思想非常的单纯。那就是输入一个网址,点击按钮,将从网络上获取的一张图片显示到一个ImageView控件上。
这样看来,我们需要用到的核心就是网络操作了。说白了,就是读取网络流文件了。

代码展示


首先是主界面的布局文件


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText 
        android:id="@+id/et_website"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="please type the url "
        />
    <Button 
        android:id="@+id/btn_get"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Check"

        />
    <ImageView 
        android:id="@+id/iv_picture"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        />

</LinearLayout>

然后是主界面的逻辑代码

package com.example.getphotobyxml;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.example.service.ImageService;

public class MainActivity extends Activity {

    private EditText mEt_url;
    private ImageView mIv_picture;
    private Button mBtn_get;

    /**
     * 初始化相关的需要使用到的ID
     */
    public void init() {
        mEt_url = (EditText) findViewById(R.id.et_website);
        mIv_picture = (ImageView) findViewById(R.id.iv_picture);
        mBtn_get = (Button) findViewById(R.id.btn_get);

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //记得要调用哦
        init();

        mBtn_get.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String website = mEt_url.getText().toString();
                if (website == null || website.equals("")) {
                    Toast.makeText(MainActivity.this, "请输入正确的网址哦!",
                            Toast.LENGTH_LONG).show();
                    return;
                }
                byte[] bytes;

                try {
                    bytes = ImageService.getImage(website);
                    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
                            bytes.length);
                    mIv_picture.setImageBitmap(bitmap);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * 从网络以XML的方式获得一张图片,并显示到一个ImageView上
     * 按钮事件可以直接不注册onClickListener,而使用这个方法
     * @param view
     */
    public void getPicture(View view) {
        String website = mEt_url.getText().toString();
        if (website == null || website.equals("")) {
            Toast.makeText(this, "请输入正确的网址哦!", Toast.LENGTH_LONG).show();
            return;
        }
        byte[] bytes;

        try {
            bytes = ImageService.getImage(website);
            Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
                    bytes.length);
            mIv_picture.setImageBitmap(bitmap);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

service 以及 tools助手

package com.example.service;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import com.example.utils.StreamTool;

/**
*图片服务的业务类
*/
public class ImageService {

    public static byte[] getImage(String website) throws Exception {

        URL url = new URL(website);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
        if(conn.getResponseCode()==200){
            InputStream inputStream = conn.getInputStream();
            byte[] bytes = StreamTool.read(inputStream);
            return bytes;
        }
        return "读取网络数据失败".getBytes();
    }



}

package com.example.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

/**
*专门用于将输入流转换成一个字节数组的utils类
*/
public class StreamTool {

    public static byte[] read(InputStream inputStream) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while((len = inputStream.read(buf))!=-1){
            baos.write(buf, 0 ,len);
        }
        baos.close();
        return buf;
    }

}

总结


这里面的代码是非常的简单的,我这里贴出代码的主要的目的是为了展示分层的思想,以及重构的艺术。
在代码中我们看到了,创建了专门的类来完成专门的工作。而且不同的层次的类,处理的业务也是不一样的。这样有助于我们以面向对象的方式编程,带来更加清晰的逻辑。

查看评论

Android基础-获取网络上的图片并显示

android手机和浏览器也是一样的,也可以通过网络通讯获取数据,如调用webservice,EJB等。下面就通过一个小例子从网络获取一幅图片并显示在手机上,开发中将会使用到一个新的组件ImageVi...
  • kong_z
  • kong_z
  • 2015-06-20 10:46:47
  • 1045

Android通过网络URL获取图片并显示

  • 2017年03月18日 17:19
  • 2.77MB
  • 下载

Android程序如何实现从网络中获取一张图片

首先,我们要知道图片这种文件,不能以我们印象中那些基本数据类型来定义或是以这些类型从网络中获取图片。 所以我们需要用到二进制(计算机的世界就是一个二进制的世界啊。。。)数据类型。...
  • u013761665
  • u013761665
  • 2014-05-12 22:08:51
  • 2652

android开发之就本地和网络图片的压缩以及缓存详解

懒惰,只是为了更好的懒惰!
  • zz1175854992
  • zz1175854992
  • 2015-03-15 17:43:27
  • 3003

Android 如何根据网络地址获取网络图片方法

Android 如何根据网络地址获取网络图片方法
  • Dorsey_c
  • Dorsey_c
  • 2015-11-08 21:10:29
  • 6713

Android获取网络图片的三种方法

Android获取网络图片 AsynTask异步获取
  • qq_14923661
  • qq_14923661
  • 2016-05-06 21:23:33
  • 2675

android从网络中获得一张图片,并显示在屏幕上

1:androidmanifest.xml的内容
  • woshisap
  • woshisap
  • 2011-07-20 11:50:06
  • 25734

Android 使用URL读取网络图片资源

MainActivity里面在适当的位置调用了new HttpImageDownload((ImageView) findViewById(R.id.imageView)).execute(); 其中...
  • sinat_16492463
  • sinat_16492463
  • 2015-03-31 14:01:05
  • 5299

Android 下载网络图片保存到本地

Android 下载网络图片保存到本地
  • u011340932
  • u011340932
  • 2014-08-25 13:17:23
  • 12696

android 获取网络图片并在Imageview上显示

这个是我使用的图片。。。http://imgstore04.cdn.sogou.com/app/a/100520024/877e990117d6a7ebc68f46c5e76fc47a 布局中声明一个...
  • woshimayongheng
  • woshimayongheng
  • 2013-11-15 01:10:37
  • 16783
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 333万+
    积分: 3万+
    排名: 148
    博客专栏
    最新评论