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

作者:你好好笑的样子i 时间:2021-06-14 14:57:45 

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);

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

标签:Android,LitePal,存取图片
0
投稿

猜你喜欢

  • Android实现无标题栏全屏的方法

    2023-06-25 11:14:27
  • Java实现链表数据结构的方法

    2023-10-19 20:36:57
  • Spring Security OAuth2 实现登录互踢的示例代码

    2023-09-04 19:09:28
  • unity实现贪吃蛇游戏

    2022-05-28 07:07:51
  • SpringBoot 如何使用RestTemplate发送Post请求

    2022-03-03 09:35:47
  • SpringBoot如何动态修改Scheduled(系统启动默认执行,动态修改)

    2023-11-29 06:13:27
  • 分析java中全面的单例模式多种实现方式

    2021-12-28 05:40:29
  • c#删除代码中的单行注释行示例

    2023-05-11 22:44:49
  • winform调用javascript的小例子

    2022-05-21 21:17:26
  • Java中闭包简单代码示例

    2023-11-08 23:09:48
  • C#实现将DataTable内容输出到Excel表格的方法

    2023-05-01 15:20:38
  • Windows系统中C#读写ini配置文件的程序代码示例分享

    2022-05-15 08:57:33
  • 基于java中的流程控制语句总结(必看篇)

    2023-11-08 09:56:59
  • java原生序列化和Kryo序列化性能实例对比分析

    2023-11-26 16:04:20
  • C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法

    2021-10-18 08:01:29
  • Java 动态数组的实现示例

    2022-02-27 07:05:25
  • springcloud配置ssh的问题及解决方法

    2023-11-03 15:48:11
  • Java线程的全方位详解

    2023-04-11 14:02:55
  • spring mvc url匹配禁用后缀访问操作

    2021-11-19 23:57:34
  • Android如何使用RecyclerView打造首页轮播图

    2022-06-08 13:15:39
  • asp之家 软件编程 m.aspxhome.com