Android利用LitePal操作数据库存取图片

 更新时间:2017年08月03日 09:23:16   作者:你好好笑的样子i  
这篇文章主要为大家详细介绍了Android利用LitePal操作数据库存取图片的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多数据库语言里,处理大字段都是不容易的,像图片这样的文件放在数据库里会有问题:对数据库的读写速度永远赶不上文件系统的处理速度,使数据库变得巨大;但也有很多人认为像图片这样的数据存放在数据库中也有好处:易于备份,且备份速度绝对比备份文件快,比较容易数据迁移等等。其实这两种方法都有优缺点,具体使用哪种方法要视情况而定。个人倾向于使用数据库存取图片,因为个人认为存到数据库里的数据不会因外部数据的变化而丢失改变,比如你拍照获得一张图片,如果是将路径存到数据库,当这张照片被删除之后,下次读取数据库就得不到想要的结果了。接下来详细介绍数据库存取图片的方法:

1、把图片转换为字节

private byte[]img(Bitmap bitmap){ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    return baos.toByteArray(); 
  } 

2、把图片存储到数据库

假设获取的图片为bitmap,数据库有一张User表,存储的属性为byte[]headshot

public class User extends DataSupport { 
 
private byte[] headshot;//头像 
 
public User(){ 
super(); 
} 
 
public User(byte[]headshot){ 
super(); 
this.headshot=headshot; 
} 
public byte[] getHeadshot() { 
    return headshot; 
  } 
 
  public void setHeadshot(byte[] headshot) { 
    this.headshot = headshot; 
  } 
} 

对图片进行保存

//获取到图片 
Bitmap headShot=BitmapFactory.decodeFile(imagePath); 
//把图片转换字节流 
byte[]images=img(headShot); 
//找到用户 
User users=DataSupport.findFirst(User.class); 
//保存 
users.setHeadshot(images); 
users.save(); 

4、获取图片

User mUser=DataSupport.findFrist(User.class); 
byte[]images=mUser.getHeadshot(); 
Bitmap bitmap=BitmapFactory.decodeByteArray(images,0,images.length); 

好了,到此完成对数据库存取图片。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Flutter Widget移动UI框架使用Material和密匙Key实战

    Flutter Widget移动UI框架使用Material和密匙Key实战

    这篇文章主要为大家介绍了Flutter Widget移动UI框架使用Material和密匙Key实战,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android ListView构建支持单选和多选的投票项目

    Android ListView构建支持单选和多选的投票项目

    如何在Android的ListView中构建CheckBox和RadioButton列表?这篇文章主要为大家详细介绍了Android ListView实现支持单选和多选的投票项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android md5加密与php md5加密一致详解

    Android md5加密与php md5加密一致详解

    这篇文章主要介绍了Android md5加密与php md5加密一致详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android通用索引栏实现代码

    Android通用索引栏实现代码

    这篇文章主要为大家详细介绍了Android通用索引栏实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android EditText实现输入金额类型详解

    Android EditText实现输入金额类型详解

    EditText是Android中一个非常实用的控件,有很多InputType,可以来达到不同的输入效果,下面这篇文章主要给大家介绍了关于Android EditText实现输入金额类型的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • OpenGL ES正交投影实现方法(三)

    OpenGL ES正交投影实现方法(三)

    这篇文章主要为大家详细介绍了OpenGL ES正交投影的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android国际化之中英文语言切换

    Android国际化之中英文语言切换

    大家好,本篇文章主要讲的是Android国际化之中英文语言切换,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Android 仿日历翻页、仿htc时钟翻页、数字翻页切换效果

    Android 仿日历翻页、仿htc时钟翻页、数字翻页切换效果

    这篇文章主要介绍了Android 仿日历翻页、仿htc时钟翻页、数字翻页切换效果,需要的朋友可以参考下
    2017-07-07
  • 解决Android 沉浸式状态栏和华为虚拟按键冲突问题

    解决Android 沉浸式状态栏和华为虚拟按键冲突问题

    对于现在的 App 来说,布局页面基本都会用到沉浸式状态栏,单纯的沉浸式状态栏很容易解决,但是在华为手机上存在一个底部虚拟按键的问题,会导致页面底部和顶部出现很大的问题,下面通过本文给大家分享Android 沉浸式状态栏和华为虚拟按键冲突问题,一起看看吧
    2017-07-07
  • android自定义开关控件-SlideSwitch的实例

    android自定义开关控件-SlideSwitch的实例

    本篇文章主要介绍了android自定义开关控件-SlideSwitch的实例,实现了手机控件开关的功能,感兴趣的小伙伴们可以参考一下。
    2016-11-11

最新评论