zoukankan      html  css  js  c++  java
  • Android程序如何实现从网络中获取一张图片

        在学习黎活明的Android视频的时候,有一讲是说怎么从网络中获取图片。这里,我就做一个笔记和总结吧。

    首先,我们要知道图片这种文件,不能以我们印象中那些基本数据类型来定义或是以这些类型从网络中获取图片。

    所以我们需要用到二进制(计算机的世界就是一个二进制的世界啊。。。)数据类型。

    说到网络,我们就会想网址。是的,这里,我们从网络上获取一张图片,也得知道这张图片的网址。

    本用例中,我用的是写死一个图片地址,大家也可以用各种方法来把这个地址不写死,做成一个浏览的效果。

    这里,我们还要用到一个位图(Bitmap)类。

    在获取图片二进制时,我们首先用openConnection()打开一个图片连接;再设置请求命令将被发送到远程HTTP服务器;最后通过输入流输入图片数据。

    GetImageActivity.java

    package com.image.ui;
    
    import com.image.servce.ImageServce;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class GetImageActivity extends Activity {
    	
    	TextView textView;
    	ImageView imageView;
    	private final static String TAG = "GetImageActivity";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            Button button = (Button)this.findViewById(R.id.buttonShowImage);
            textView = (TextView)this.findViewById(R.id.pathName);
            imageView = (ImageView)this.findViewById(R.id.imageView);
            
            button.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				String path = textView.getText().toString();
    				try {
    					byte[] data = ImageServce.getNetImage(path);
    					Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); // 生成位图
    					imageView.setImageBitmap(bitmap); // 显示位图
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					Toast.makeText(GetImageActivity.this, R.string.error, 1).show(); // 显示错误信息
    					Log.e(TAG, e.toString()); // 生成异常日志
    				}
    			}
    		});
        }
    }


    ImageServce.java

    package com.image.servce;
    
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import com.image.utils.StreamTool;
    
    public class ImageServce {
    	private final static int ONE_SECOND = 1000; // 定义一秒
    	private final static String URL_HTTP = "http://a.hiphotos.bdimg.com/album/s%3D740%3Bq%3D90/sign=493c3a7f9e82d158bf825bb5b03168e5/1c950a7b02087bf492e4eb78f0d3572c11dfcf13.jpg";
    
    
    	public static byte[] getNetImage(String path) throws Exception {
    
    		// 给定一条网络路径
    		URL url = new URL(URL_HTTP);
    		HttpURLConnection huconn = (HttpURLConnection) url.openConnection(); // url用openConnection()打开连接
    		huconn.setRequestMethod("GET"); // 设置用GET请求命令将被发送到远程HTTP服务器
    
    		huconn.setConnectTimeout(5 * ONE_SECOND); // 设置超时时间5秒
    
    		InputStream inStream = huconn.getInputStream(); // 通过输入流输入图片数据
    		return StreamTool.getNetImage(inStream);
    	}
    
    }
    


    StreamTool.java

    package com.image.utils;
    
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    
    public class StreamTool {
    	public static byte[] getNetImage(InputStream inStream) throws Exception {
    
    		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    		byte[] buffer = new byte[1024];
    		int len = 0;
    
    		// 读取到流的末尾,返回-1
    		// 这里为只要还没有读到流的末尾,就一直往内存中输出二进制数据
    		while ((len = inStream.read(buffer)) != -1) {
    			outStream.write(buffer, 0, len);
    		}
    		inStream.close();
    		return outStream.toByteArray();
    	}
    }


    效果图:

                          


    这里我给出一个我上传到CSDN上的资源源码。Android程序从网络上获取一张图片【代码】

  • 相关阅读:
    airflow分布式部署(四)airflow环境变量与参数配置
    airflow分布式部署(三)redis安装
    airflow分布式部署(二)mysql安装
    airflow分布式部署(一)Python环境
    向Python脚本传参数
    分类器评估
    线性判别分析
    决策树分类器
    K最近邻分类
    半朴素贝叶斯分类器
  • 原文地址:https://www.cnblogs.com/fengju/p/6336164.html
Copyright © 2011-2022 走看看