欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程获取图片数据的方法详解

程序员文章站 2023-01-26 22:55:23
本文实例讲述了android编程获取图片数据的方法。分享给大家供大家参考,具体如下: 网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?andr...

本文实例讲述了android编程获取图片数据的方法。分享给大家供大家参考,具体如下:

网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?android手机和浏览器也是一样的,也可以通过网络通讯获取数据,如调用webservice,ejb等。下面就通过一个小例子从网络获取一幅图片并显示在手机上,开发中将会使用到一个新的组件imageview.

1. 写一个用来处理字节流的工具类

package org.lxh.util;
import java.io.bytearrayoutputstream;
import java.io.inputstream;
public class streamtool {
  public static byte[] readinputstream(inputstream in) throws exception{
    int len=0;
    byte buf[]=new byte[1024];
    bytearrayoutputstream out=new bytearrayoutputstream();
    while((len=in.read(buf))!=-1){
      out.write(buf,0,len); //把数据写入内存
    }
    out.close(); //关闭内存输出流
    return out.tobytearray(); //把内存输出流转换成byte数组
  }
}

2. 写一个得到图片byte数组的service类

package org.lxh.service;
import java.io.bytearrayoutputstream;
import java.io.file;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.net.httpurlconnection;
import java.net.malformedurlexception;
import java.net.url;
import org.lxh.util.streamtool;
import android.util.log;
public class webservice {
  public static byte[] getimage(string path){
    url url;
    byte[] b=null;
    try {
      url = new url(path);  //设置url
      httpurlconnection con;
      con = (httpurlconnection)url.openconnection(); //打开连接
      con.setrequestmethod("get"); //设置请求方法
      //设置连接超时时间为5s
      con.setconnecttimeout(5000);
      inputstream in=con.getinputstream(); //取得字节输入流
      b=streamtool.readinputstream(in);
    } catch (exception e) {
      e.printstacktrace();
    }
    return b; //返回byte数组
  }
}

3. 写一个用户操作界面

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
<textview
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/hello"
  />
  <textview
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/picaddress"
  />
  <edittext
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="http://www.desk9.com/desk9image/21/desk9_21_1690_35790_s.jpg"
  android:id="@+id/imageaddress"
  />
  <button
   android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/look"
  android:id="@+id/button"
  />
  <imageview
   android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:id="@+id/image"/>
</linearlayout>

4. 写一个activity类

package org.lxh.net;
import org.lxh.service.webservice;
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.edittext;
import android.widget.imageview;
import android.widget.toast;
public class netactivity extends activity {
  private edittext picaddress;
  private button button;
  private imageview imageview;
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.main);
    button=(button)this.findviewbyid(r.id.button);
    imageview=(imageview)this.findviewbyid(r.id.image);
    picaddress=(edittext)this.findviewbyid(r.id.imageaddress);
    button.setonclicklistener(new view.onclicklistener() {
      public void onclick(view v) {
        string address=picaddress.gettext().tostring();
        try {
          byte[] data=webservice.getimage(address); //得到图片的输入流
          //二进制数据生成位图
          bitmap bit=bitmapfactory.decodebytearray(data, 0, data.length);
          imageview.setimagebitmap(bit);
        } catch (exception e) {
          log.e("netactivity", e.tostring());
          toast.maketext(netactivity.this, r.string.error, 1).show();
        }
      }
    });
  }
}

5. 添加网络访问的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="org.lxh.net"
   android:versioncode="1"
   android:versionname="1.0">
  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".netactivity"
         android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.main" />
        <category android:name="android.intent.category.launcher" />
      </intent-filter>
    </activity>
  </application>
  <uses-sdk android:minsdkversion="7" />
  <uses-permission android:name="android.permission.internet"/>
</manifest>

6. 这里把strings.xml文件也贴出来

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="hello">hello world, netactivity!</string>
  <string name="app_name">图片查看</string>
  <string name="picaddress">图片地址</string>
  <string name="look">查看</string>
  <string name="error">网络连接异常</string>
</resources>

下面是运行效果图:

Android编程获取图片数据的方法详解

更多关于android相关内容感兴趣的读者可查看本站专题:《android图形与图像处理技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。