加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

二维码和相片在SQLite中的图片保存和查询

发布时间:2020-12-12 19:35:22 所属栏目:百科 来源:网络整理
导读:[size=0.83em] 二维码和相片在 SQLite 数据库中的 图片保存 和查询 整体的工作流程如下: 保存流程: 查询流程: 该实例主要分为 4 个部分: 1 、创建一个二维码和相片的数据库保存和查询的工程。 2 、创建一个数据库。 3 、二维码和相片的保存。 4 、二维码

[size=0.83em] 二维码和相片在SQLite数据库中的图片保存和查询 整体的工作流程如下: 保存流程:
查询流程: 该实例主要分为4个部分: 1、创建一个二维码和相片的数据库保存和查询的工程。 2、创建一个数据库。 3、二维码和相片的保存。 4、二维码和相片的查询。 1、创建工程 首先,打开已经配置好的android应用开发的集中开发环境Eclipse。创建一个新的工程SaveImage,Target为2.3.3,包名为:com.yiyiweixiao,主Activity为main。 如下图所示:


然后,创建一个新的布局main.xml 布局代码如下所示:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <Button android:layout_height="wrap_content" android:id="@+id/button1"
  6. android:layout_width="wrap_content"
  7. android:text="保存图片1"
  8. android:layout_alignParentTop="true" android:layout_alignParentLeft="true"></Button>
  9. <Button android:layout_height="wrap_content" android:id="@+id/button2"
  10. android:layout_width="wrap_content"
  11. android:text="保存图片2"
  12. android:layout_alignParentTop="true" android:layout_toRightOf="@+id/button1"></Button>
  13. <Button android:layout_height="wrap_content" android:id="@+id/button3"
  14. android:layout_width="wrap_content"
  15. android:text="查询图片1"
  16. android:layout_below="@+id/button1" android:layout_alignParentLeft="true"></Button>
  17. <Button android:layout_height="wrap_content" android:id="@+id/button4"
  18. android:layout_width="wrap_content"
  19. android:text="查询图片2"
  20. android:layout_alignBaseline="@+id/button3"
  21. android:layout_alignBottom="@+id/button3" android:layout_toRightOf="@+id/button3"></Button>
  22. <ImageView android:src="@drawable/icon" android:layout_width="wrap_content"
  23. android:id="@+id/imageView1"
  24. android:layout_height="wrap_content"
  25. android:layout_below="@+id/button3" android:layout_alignParentLeft="true"></ImageView>





  26. <ImageView android:src="@drawable/icon" android:layout_width="wrap_content"
  27. android:id="@+id/imageView2"
  28. android:layout_height="wrap_content"
  29. android:layout_alignTop="@+id/imageView1" android:layout_alignLeft="@+id/button4"></ImageView>
  30. </RelativeLayout>
复制代码
效果图如下:
2、创建一个数据库 首先,在包com.yiyiweixiao下面,创建一个SQLiteOpenHelper助手类的实例MySQLiteOpenHelper.java。 代码如下:
  1. package com.yiyiweixiao;

  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;
  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;

  6. public class MySQLiteOpenHelper extends SQLiteOpenHelper {
  7. // 重写构造方法
  8. public MySQLiteOpenHelper(Context context,String name,
  9. CursorFactory cursor,int version) {
  10. super(context,name,cursor,version);
  11. }

  12. // 创建数据库的方法
  13. public void onCreate(SQLiteDatabase db) {
  14. // 创建一个数据库,表名:imagetable,字段:_id、image。
  15. db.execSQL("CREATE TABLE imagetable (_id INTEGER PRIMARY KEY AUTOINCREMENT,image BLOB)");
  16. }

  17. // 更新数据库的方法
  18. public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {

  19. }

  20. }
复制代码 然后,在main.java中创建MySQLiteOpenHelper类的实例,并创建一个可读写的数据库。
  1. // 创建助手类的实例
  2. // CursorFactory的值为null,表示采用默认的工厂类
  3. mySQLiteOpenHelper = new MySQLiteOpenHelper(this,"saveimage.db",null,1);
  4. // 创建一个可读写的数据库
  5. mydb = mySQLiteOpenHelper.getWritableDatabase();
复制代码 3、二维码和相片向数据库中保存的方法。第一步:将图片转化为位图。
  1. //将图片转化为位图
  2. Bitmap bitmap1=BitmapFactory.decodeResource(getResources(),R.drawable.erweima);
复制代码 第二步:将位图转化为字节数组。
  1. int size=bitmap1.getWidth()*bitmap1.getHeight()*4;
  2. //创建一个字节数组输出流,流的大小为size
  3. ByteArrayOutputStream baos=new ByteArrayOutputStream(size);
  4. //设置位图的压缩格式,质量为100%,并放入字节数组输出流中 bitmap1.compress(Bitmap.CompressFormat.PNG,100,baos);
  5. //将字节数组输出流转化为字节数组byte[]
  6. byte[] imagedata1=baos.toByteArray();
复制代码 第三步:将字节数组保存到数据库。
  1. //将字节数组保存到数据库中
  2. ContentValues cv=new ContentValues();
  3. cv.put("_id",1);
  4. cv.put("image",imagedata1);
  5. mydb.insert("imagetable",cv);
  6. //关闭字节数组输出流
  7. baos.close();
复制代码 保存成功后,在 DDMS 中,即可看到保存成功的文件。如下图所示:

用可视化开发工具打开后的列表如下所示:


4、从数据库中查询二维码和相片的方法。第一步:将数据库中的Blob(二进制大对象类型)数据转换为字节数组。方法如下:
  1. //创建一个指针
  2. Cursor cur=mydb.query("imagetable",new String[]{"_id","image"},null);
  3. byte[] imagequery=null;
  4. if(cur.moveToNext()){
  5. //将Blob数据转化为字节数组imagequery=cur.getBlob(cur.getColumnIndex("image"));
  6. }
复制代码 第二步:将字节数组转换为位图
  1. //将字节数组转化为位图
  2. Bitmap imagebitmap=BitmapFactory.decodeByteArray(imagequery,imagequery.length);
复制代码 第三步:将位图显示为图片
  1. iv1=(ImageView) findViewById(R.id.imageView1);
  2. //将位图显示为图片
  3. iv1.setImageBitmap(imagebitmap);
复制代码 在模拟器中的显示效果如下




至此,便完成了二维码和图片在 SQLite 数据库中的保存和查询。具体的代码详见源代码,这里只是列出了核心代码。谢谢。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读