android获取网络图片

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

资源描述:

关于android获取网络图片主要是把网络图片的数据流读入到内存中然后用
1.Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length); 
方法来将图片流传化为bitmap类型 这样才能用到
1.imageView.setImageBitmap(bitMap); 
来进行转化
在获取bitmap时候出现null 
错误代码:
byte[] data = GetImageForNet.getImage(path); 
int length = data.length; 
Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length); 
imageView.setImageBitmap(bitMap); 
下面是 GetImageForNet.getImage()方法的代码清单
public static byte[] getImage(String path) throws Exception { 
URL url = new URL(path); 
HttpURLConnection httpURLconnection = (HttpURLConnection)url.openConnection(); 
httpURLconnection.setRequestMethod("GET"); 
httpURLconnection.setReadTimeout(6*1000); 
InputStream in = null; 
byte[] b = new byte[1024]; 
int len = -1; 
if (httpURLconnection.getResponseCode() == 200) { 
in = httpURLconnection.getInputStream(); 
in.read(b); 
in.close(); 
return b; 

return null; 

看起来没有问题 获取网络图片输入流,填充二进制数组,返回二进制数组,然后使用 Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length); data就是返回的二进制数组
获取bitMap 看起来没有问题,可是bitMap就是为null!
BitmapFactory.decodeByteArray方法中所需要的data不一定是传统意义上的字节数组,查看android api,最后发现BitmapFactory.decodeByteArray所需要的data字节数组并不是想象中的数组!而是把输入流传化为字节内存输出流的字节数组格式
正确代码:
try { 
byte[] data = GetImageForNet.getImage(path); 
String d = new String(data); 
// File file = new File("1.jpg"); 
//OutputStream out = new FileOutputStream(file); 
//out.write(data); 
//out.close(); 
int length = data.length; 
Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length); 
imageView.setImageBitmap(bitMap); 
//imageView.seti 
} catch (Exception e) { 
Log.i(TAG, e.toString()); 
Toast.makeText(DataActivity.this, "获取图片失败", 1).show(); 

下面是改进后的 GetImageForNet.getImage()方法的代码清单
public static byte[] getImage(String path) throws Exception { 
URL url = new URL(path); 
HttpURLConnection httpURLconnection = (HttpURLConnection)url.openConnection(); 
httpURLconnection.setRequestMethod("GET"); 
httpURLconnection.setReadTimeout(6*1000); 
InputStream in = null; 
byte[] b = new byte[1024]; 
int len = -1; 
if (httpURLconnection.getResponseCode() == 200) { 
in = httpURLconnection.getInputStream(); 
byte[] result = readStream(in); 
in.close(); 
return result; 


return null; 


public static byte[] readStream(InputStream in) throws Exception{ 
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
byte[] buffer = new byte[1024]; 
int len = -1; 
while((len = in.read(buffer)) != -1) { 
outputStream.write(buffer, 0, len); 

outputStream.close(); 
in.close(); 
return outputStream.toByteArray(); 
}


-------------------------------------------------------------------------------------------------------------------
android写入数据库、读取sqlite中的图片

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class AndroidTestActivity extends Activity {
    /** Called when the activity is first created. */
 
 private Button btn;
 
 private SQLiteDatabase db = null;
 
 private ImageView imageView;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        /**
         * getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。
         * 但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,
         * 倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,
         * 如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
         */
        DBHelper helper = new DBHelper(AndroidTestActivity.this, "mysql1.txt");
  db = helper.getWritableDatabase();

  
        imageView=(ImageView)findViewById(R.id.imgView);
        btn=(Button)findViewById(R.id.button1);
        btn.setOnClickListener(
          
          new Button.OnClickListener()
          {
           public void onClick(View v)
           {
            String fileName="mysql.db";
               AssetManager assets = getAssets();
               try {
                InputStream is=assets.open(fileName);
                
                Log.v("is.length",  is.available()+"");
                
                FileOutputStream fos=new FileOutputStream(Environment.getDataDirectory()+ "/data/com.xujie.test/databases/" + "mysql1.txt");
                
                byte[]bytes=getInput(is);
                
//                int b=0;
                
//                while((b=is.read())!=-1)
//                {
//                 fos.write(b);
//                }
                fos.write(bytes);

        /**
         * 将数据流关闭
         */
                
             fos.flush();
          fos.close();        
          is.close();
          
               } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
               
            Cursor cursor= get_equipment_by_id("3");
            
            while(cursor.moveToNext())
            {
             Bitmap bitmap=getIconFromCursor(cursor, cursor.getColumnIndex("icon"));

                Drawable drawable=new BitmapDrawable(bitmap);
                
                imageView.setImageDrawable(drawable);
            }
           }
          }
        );
    }
    
    
    public Bitmap getIconFromCursor(Cursor c, int iconIndex) { 
     byte[] data = c.getBlob(iconIndex); 
     try {

      Log.v("BitmapFactory.decodeByteArray.length000:", "BitmapFactory.decodeByteArray.length");
      Log.v("BitmapFactory.decodeByteArray.length:", BitmapFactory.decodeByteArray(data, 0, data.length).getWidth()+"");
      Log.v("BitmapFactory.decodeByteArray.length111:", "BitmapFactory.decodeByteArray.length");
      
     return BitmapFactory.decodeByteArray(data, 0, data.length); 
     } catch (Exception e) { 
     return null; 
     }
    }

    public byte[] getInput(InputStream is) throws IOException
 {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  byte[] b = new byte[1024];
  int len = 0;

  while ((len = is.read(b, 0, 1024)) != -1) 
  {
   baos.write(b, 0, len);
   baos.flush();
  }
  return baos.toByteArray();
 }
    
 /**
  * @name    get_equipment_by_id
  * @desc     设备列表
  * @author   liwang
  * @date    2011-12-28
  * @param   String type 设备类型
  * @return   Cursor
  */
 public Cursor get_equipment_by_id(String id)
 {
  return db.query("equipments", null, "id=?", new String[]{id} ,null, null, null);
 }
    class DBHelper extends SQLiteOpenHelper
 {

  public DBHelper(Context context, String name, CursorFactory factory, int version)
  {
   super(context, name, factory, version);
   // TODO Auto-generated constructor stub
  }
  public DBHelper(Context context, String name)
  {
   super(context, name, null, 1);
  }
  @Override
  public void onCreate(SQLiteDatabase db)
  {
   // TODO Auto-generated method stub
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
  {
   // TODO Auto-generated method stub
  }
 }
}

转载于:https://my.oschina.net/u/1423612/blog/291707

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WSS Alert(邮件提醒) 定制

项目需要&#xff0c;研究了一下WSS的Alert定制。 定制有两种方法: (方法1)修改模板文件 默认模板是12\TEMPLATE\XML\alerttemplates.xml,将这个模板复制一份修改,然后用stsadm命令添加模板: STSADM -o updatealerttemplates -url <http://urlname> -filename <your w…

windows log日志分割_如何将日志记录到 Windows事件日志 中

每当出现一些未捕获异常时&#xff0c;操作系统都会将异常信息写入到 Windows 事件日志 中&#xff0c;可以通过 Windows 事件查看器 查看&#xff0c;如下图&#xff1a; 这篇文章将会讨论如何使用编程的方式将日志记录到 Windows 事件日志 中。 安装 EventLog 要想在 .NET Co…

偷窃转基因玉米种子引发中美打农业官司

偷窃转基因玉米种子引发中美打农业官司 请看下面相片&#xff1a; 这张相片是孩子们与转基因玉米在一起的景象。转基因玉米颗粒饱满&#xff0c;孩子们的小手差点儿抓不住&#xff08;由于玉米棒子非常粗&#xff09;。广大农民喜欢这样的抗虫、耐药并且产量高的农作物&#xf…

mysql中视图的概念_MySql中的视图的概念及应用

视图的基本概念视图是从一个或几个基本表(或者视图)导出的表。它与基本表不同&#xff0c;是一个虚表。数据库只存放视图的定义&#xff0c;而不存放视图对应的数据&#xff0c;这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化&#xff0c;从视图中查询出的数据也…

JQuery常用的代码片段

2019独角兽企业重金招聘Python工程师标准>>> JQuery常用的代码片段 JQuery在当前众多网站开发中都有用到。他简易的操作以及对各个浏览器的兼容性&#xff0c;被广大的开发者一致看好。 下面是一些常用实用的 JQuery 代码片段。看看有没有需要收藏的吧&#xff1a; …

linux环境配置

在安装linux之前首先要明白linux系统的功能特性&#xff0c;linux是多少位 的&#xff0c;对要使用的工具要有大体的了解&#xff0c;那样就不至于在之后的安装中耽误太多时间&#xff0c;比如安装的系统是32位的就要安装与之对应的工具。我们大体上了解一下linux能支持的又比较…

tomcat 启动速度慢背后的真相

1. tomcat 启动慢 在线上环境中&#xff0c;我们经常会遇到类似的问题&#xff0c;就是tomcat 启动比较慢&#xff0c;查看内存和cpu,io都是正常的&#xff0c;但是启动很慢&#xff0c;有的时候长达几分钟&#xff0c;这到底是什么原因导致的。 1.1 tomcat 获取随机值阻塞 ​ …

[导入]相片: 23853741.jpg

文章来源:http://img.blog.163.com/photo/NdAK9XEb2a-KOR7zpDWpAA/588564176302178421.jpg转载于:https://www.cnblogs.com/baiyirui/archive/2008/04/27/1173117.html

手摇泵PHP一32_节能手摇泵的制作方法

本实用新型属于液压动力装置技术领域&#xff0c;特指一种节能手摇泵。背景技术&#xff1a;如图1-2所示&#xff0c;目前&#xff0c;手摇泵采用分体式结构&#xff0c;比如&#xff0c;左横向出油通道和右横向出油通道是装配在泵体上的&#xff0c;由于零件较多&#xff0c;所…

掌握 ASP.NET 之路:自定义实体类简介 来源 :msdn

ADODB.RecordSet 和常常被遗忘的 MoveNext 的时代已经过去&#xff0c;取而代之的是 Microsoft ADO.NET 强大而又灵活的功能。我们的新武器就是 System.Data 名称空间&#xff0c;它的特点是具有速度极快的 DataReader 和功能丰富的 DataSet&#xff0c;而且打包在一个面向对象…

HTML入门学习 -- HTML基础知识

打算按照 HTML -> CSS –> JavaScript –> jQuery –> HTML5 –> WebGL 的顺序&#xff0c;简略学习一下Web前端技术。 因为不是搞Web的&#xff0c;只需要大概过一下有个印象就行&#xff0c;每一项花费3天到一周时间走马观花的看看。 编辑器就选择Sublime Tex…

并发编程实战(一)

并发编程的三个核心问题: 分工 : 高效的拆解任务分给线程同步 : 线程之间的协作互斥 : 保证同一时刻只允许一个线程访问共享资源这个其实不难理解,做个简单的比喻,我们团队做一个项目的时候肯定是先分配任务(分工),然后等到任务完成进行合并对接(同步),在开发过程中,使用版本控…

java pdf打印_Java 打印PDF文档

本文将介绍如何在Java应用程序中打印PDF文档。一般有以下三种常见打印方式&#xff1a;静默打印显示打印对话框打印打印PDF时自定义纸张大小使用工具&#xff1a;Free Spire.PDF for Java创建运行环境&#xff1a;方式 1&#xff1a;通过官网下载组件&#xff0c;解压后将lib文…

微信支付配置参数:支付授权目录、回调支付URL

一、开通微信支付的首要条件是&#xff1a;认证服务号或政府媒体类认证订阅号&#xff08;一般认证订阅号无法申请微信支付&#xff09;二、微信支付分为老版支付和新版支付&#xff0c;除了较早期申请的用户为老版支付&#xff0c;现均为新版微信支付。三、公众平台微信支付开…

[导入]关于阶乘的两个常见算法及一个相关面试题

摘要: 本文首先给出了阶乘的数学定义&#xff0c;然后说明了它的两种简单算法&#xff0c;最后提供了一个很有意思的与阶乘相关的面试题的思路。 阅读全文Anders Cui 2008-05-19 12:12 发表评论文章来源:http://www.cnblogs.com/anderslly/archive/2008/05/19/factorial-algor…

autoresetevent java_[原创]AutoResetEvent, ManualResetEvent的Java模拟

AutoResetEvent, ManualResetEvent是C#中常用的线程同步方法&#xff0c;在Java中可以模拟&#xff0c;AutoResetEvent使用Semaphore&#xff0c;增加的是许可证数量&#xff0c;程序里只有一个许可证&#xff0c;那么当这个许可被使用后&#xff0c;就会自动锁定。相反&#x…

用Jfree实现条形柱状图表,java代码实现

用Jfree实现条形柱状图表&#xff0c;java代码实现。可经经常使用于报表的制作&#xff0c;代码自己主动生成后能够自由查看。能够自由配置图表的各个属性&#xff0c;用来达到自己的要求和目的package test1;import org.jfree.chart.*; import org.jfree.chart.plot.*; import…

bzoj 2160: 拉拉队排练

Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点&#xff0c;好的拉拉队往往能帮助球队增加士气&#xff0c;赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道&#xff0c;帮助篮球队训练好拉拉队有多么的重要。拉拉队的选拔工…

java long double精度丢失_long long类型转double类型部分精度丢失问题

我最近做了一道题&#xff0c;一个64位(unsigned __int64)范围内的数输出其除以1000的值&#xff0c;并按四舍五入保留小数点后三位。我刚开始直接写WA&#xff0c;结果发现当数比较大的时候&#xff0c;结果后几位精度总会丢失&#xff0c;只好手动模拟了一个&#xff0c;水过…

从服务器上自动更新系统补丁

对于经常重系统的用户或公司,每次安装系统后,必须得从微软网站上面下载补丁,这样很浪费时间. 如何从自己服务器上自动更新系统补丁,方法如下: 服务器端 服务器端需要安装一个更新服务器软件,如:SUS (下载地址http://www.onlinedown.net/soft/35844.htm) 客户端设置 开始 -- 运行…