设为首页 收藏本站
查看: 1594|回复: 0

[经验分享] 二维码和相片在SQLite中的图片保存和查询

[复制链接]

尚未签到

发表于 2016-12-1 10:50:41 | 显示全部楼层 |阅读模式
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=164587&extra=page=1

本帖最后由 huaxiannv 于 2012-4-2 21:30 编辑


本文参与:eoe & 友盟Android开发原创教程大赛

  
二维码和相片在SQLite数据库中的图片保存和查询
整体的工作流程如下:
保存流程:

查询流程:

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



然后,创建一个新的布局main.xml
布局代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:layout_height="wrap_content" android:id="@+id/button1"
android:layout_width="wrap_content"
android:text="保存图片1"
android:layout_alignParentTop="true" android:layout_alignParentLeft="true"></Button>
<Button android:layout_height="wrap_content" android:id="@+id/button2"
android:layout_width="wrap_content"
android:text="保存图片2"
android:layout_alignParentTop="true" android:layout_toRightOf="@+id/button1"></Button>
<Button android:layout_height="wrap_content" android:id="@+id/button3"
android:layout_width="wrap_content"
android:text="查询图片1"
android:layout_below="@+id/button1" android:layout_alignParentLeft="true"></Button>
<Button android:layout_height="wrap_content" android:id="@+id/button4"
android:layout_width="wrap_content"
android:text="查询图片2"
android:layout_alignBaseline="@+id/button3"
android:layout_alignBottom="@+id/button3" android:layout_toRightOf="@+id/button3"></Button>
<ImageView android:src="@drawable/icon" android:layout_width="wrap_content"
android:id="@+id/imageView1"
android:layout_height="wrap_content"
android:layout_below="@+id/button3" android:layout_alignParentLeft="true"></ImageView>





<ImageView android:src="@drawable/icon" android:layout_width="wrap_content"
android:id="@+id/imageView2"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imageView1" android:layout_alignLeft="@+id/button4"></ImageView>
</RelativeLayout>
复制代码




效果图如下:


2、创建一个数据库
首先,在包com.yiyiweixiao下面,创建一个SQLiteOpenHelper助手类的实例MySQLiteOpenHelper.java。
代码如下:

package com.yiyiweixiao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
// 重写构造方法
public MySQLiteOpenHelper(Context context, String name,
CursorFactory cursor, int version) {
super(context, name, cursor, version);
}

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

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

}

}
复制代码



然后,在main.java中创建MySQLiteOpenHelper类的实例,并创建一个可读写的数据库。
// 创建助手类的实例
// CursorFactory的值为null,表示采用默认的工厂类
mySQLiteOpenHelper = new MySQLiteOpenHelper(this, "saveimage.db", null,1);
// 创建一个可读写的数据库
mydb = mySQLiteOpenHelper.getWritableDatabase();
复制代码



3、二维码和相片向数据库中保存的方法。
第一步:将图片转化为位图。
//将图片转化为位图
Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.erweima);
复制代码



第二步:将位图转化为字节数组。

int size=bitmap1.getWidth()*bitmap1.getHeight()*4;
//创建一个字节数组输出流,流的大小为size
ByteArrayOutputStream baos=new ByteArrayOutputStream(size);
//设置位图的压缩格式,质量为100%,并放入字节数组输出流中 bitmap1.compress(Bitmap.CompressFormat.PNG, 100, baos);
//将字节数组输出流转化为字节数组byte[]
byte[] imagedata1=baos.toByteArray();
复制代码



第三步:将字节数组保存到数据库。

//将字节数组保存到数据库中
ContentValues cv=new ContentValues();
cv.put("_id", 1);
cv.put("image", imagedata1);
mydb.insert("imagetable", null, cv);
//关闭字节数组输出流
baos.close();
复制代码



保存成功后,在DDMS中,即可看到保存成功的文件。
如下图所示:



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


4、从数据库中查询二维码和相片的方法。
第一步:将数据库中的Blob(二进制大对象类型)数据转换为字节数组。
方法如下:
//创建一个指针
Cursor cur=mydb.query("imagetable", new String[]{"_id","image"}, null, null, null, null, null);
byte[] imagequery=null;
if(cur.moveToNext()){
//将Blob数据转化为字节数组imagequery=cur.getBlob(cur.getColumnIndex("image"));
}
复制代码



第二步:将字节数组转换为位图

//将字节数组转化为位图
Bitmap imagebitmap=BitmapFactory.decodeByteArray(imagequery, 0, imagequery.length);
复制代码



第三步:将位图显示为图片

iv1=(ImageView) findViewById(R.id.imageView1);
//将位图显示为图片
iv1.setImageBitmap(imagebitmap);
复制代码


在模拟器中的显示效果如下:



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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308138-1-1.html 上篇帖子: Android 如何对sqlite数据库进行增删改[insert、update和delete] 操作 下篇帖子: action的使用之AIR操作本地数据库sqlite的示例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表