- 浏览: 138556 次
- 性别:
文章分类
最新评论
Android使用SQLiteDatabase直接存取数据与图像的简单方法如下:
package com.test; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import com.test.R; import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Bitmap.Config; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class SQLiteDatabaseTest extends Activity { /** Called when the activity is first created. */ private Button btnSave; private Button btnLoad; private Button btnClear; private ImageView imgView; private ImageView imgView2; private TextView txtView; private Bitmap bmp; private static SQLiteDatabase db; private Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnSave = (Button) findViewById(R.id.btnSave); btnLoad = (Button) findViewById(R.id.btnLoad); btnClear = (Button) findViewById(R.id.btnClear); imgView = (ImageView) findViewById(R.id.imgView); imgView2 = (ImageView) findViewById(R.id.imgView2); txtView = (TextView) findViewById(R.id.txtView); btnSave.setOnClickListener(new ClickEvent()); btnLoad.setOnClickListener(new ClickEvent()); btnClear.setOnClickListener(new ClickEvent()); imgView2.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.bg)); mContext = SQLiteDatabaseTest.this; // 创建数据库文件 File path = mContext.getDir("databases", Context.MODE_WORLD_WRITEABLE); path = new File(path, "test.db"); int flag = SQLiteDatabase.OPEN_READWRITE; flag = flag | SQLiteDatabase.CREATE_IF_NECESSARY; flag = flag | SQLiteDatabase.NO_LOCALIZED_COLLATORS; db = SQLiteDatabase.openDatabase(path.getAbsolutePath(), null, flag); // 创建表 String sql = "create table if not exists info(" + "id integer primary key autoincrement,name varchar(20)," + "time varchar(20),img BLOB)"; db.execSQL(sql); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if (db.isOpen()) { db.close(); } if(!bmp.isRecycled()){ bmp.recycle(); } } class ClickEvent implements View.OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub if (v == btnSave) { Cursor c = db.rawQuery("select * from info", null); ContentValues values = new ContentValues(); c.moveToFirst(); values.put("name", "test" + (c.getCount() + 1)); SimpleDateFormat sDateFormat = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); String time = sDateFormat.format(new java.util.Date()); values.put("time", time); Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bg); if (null != bmp) { //在Bitmap上绘制标签 Bitmap drawBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.ARGB_8888); Canvas cvs = new Canvas(drawBmp); Paint p = new Paint(); p.setColor(Color.RED); p.setTextSize(22); cvs.drawBitmap(bmp, 0, 0, p); cvs.drawText("test" + (c.getCount() + 1), 10, 20,p); //将绘制后Bitmap转为Byte[]并加入values values.put("img", bmpToByteArray(drawBmp)); drawBmp.recycle(); } db.insert("info", null, values); c.close(); bmp.recycle(); } else if (v == btnLoad) { Cursor c = db.rawQuery("select * from info", null); c.moveToLast(); if (c.isLast()) { String name = c.getString(c.getColumnIndex("name")); txtView.setText("name:" + name + " 共计:" + c.getCount() + " 条"); bmp = cursorToBmp(c, c.getColumnIndex("img")); imgView.setImageBitmap(bmp); } c.close(); } else if (v == btnClear) { imgView.setImageBitmap(null); } } } // Bitmap to byte[] public byte[] bmpToByteArray(Bitmap bmp) { // Default size is 32 bytes ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.close(); } catch (IOException e) { e.printStackTrace(); } return bos.toByteArray(); } // Cursor to bitmap Bitmap cursorToBmp(Cursor c, int columnIndex) { byte[] data = c.getBlob(columnIndex); try { return BitmapFactory.decodeByteArray(data, 0, data.length); } catch (Exception e) { return null; } } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <ImageView android:id="@+id/imgView" android:layout_width="640dip" android:layout_height="fill_parent"/> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="150dip" android:layout_height="fill_parent" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:orientation="vertical"> <ImageView android:id="@+id/imgView2" android:layout_width="fill_parent" android:layout_height="150dip" android:layout_marginTop="10dip"/> <Button android:id="@+id/btnSave" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="保存图像"/> <Button android:id="@+id/btnLoad" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="载入图像"/> <Button android:id="@+id/btnClear" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="清除图像"/> <TextView android:id="@+id/txtView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:textSize="22sp" android:text="..."/> </LinearLayout> </LinearLayout>
开发环境:XP3+Eclipse+Android2.2+JDK6.0
测试环境:Android2.2,5寸屏,分辨率640X480
源代码:http://download.csdn.net/detail/xinzheng_wang/4420817
发表评论
-
Android onTouchEvent, onClick及onLongClick的调用机制
2012-03-08 15:44 893针对屏幕上的一个View控件,Android如何区分应当触发o ... -
android 常用颜色表
2012-03-09 16:01 920<?xml version="1.0" ... -
android ndk 环境搭建及基本编程思路
2012-03-28 16:09 885本文主要是介绍一下android ndk环境搭建及基本编程思路 ... -
windows下eclipse android-ndkr7b环境配置
2012-03-31 19:49 927注意:android-ndkr7b版本中已经集成了cyg ... -
配置 eclipse ndk 环境遇到的问题
2012-04-01 08:52 1054困惑了两天的环境配置问题,按照网上提供的方法去做总是错误 ... -
Android 配置 OpenCV2.3.1
2012-04-01 17:56 2053OpenCV2.3.1-android中大部分重要的AP ... -
Android中dip与px之间单位转换
2012-04-11 16:10 729/** * 根据手机的分辨率从dip 的单位转成为px(像素 ... -
Android 自定义像素AVD模拟器无键盘
2012-04-18 14:26 3397在Android自定义像素(如:800X480)时,AV ... -
在Android虚拟机AVD中安装APK
2012-04-18 15:13 2711为了方便测试,有时候会需要在自定义的Android虚拟机A ... -
Android SurfaceView onDraw()绘图问题
2012-06-29 11:32 10058在继承SurfaceView的类中即使重写了onDraw ... -
Android 自定义渐变背景
2012-07-04 08:36 1355在Eclipse的Android工程的res下建立dra ... -
Android 隐藏系统状态栏和标题栏
2012-07-04 09:06 1261Android中若想 隐藏系统状态栏和标题栏(全屏显示)的 ... -
Android双SurfaceView实现底部拍照,顶部绘图
2012-07-04 10:36 1541当SurfaceHolder对象的类型设置为Surf ... -
Android数据的四种存储方式之SharedPreferences、SQLite、ContentProvider和File
2012-07-06 15:32 2845Android系统一共提供了四种数据存储方式,分别 ... -
Android SQLite存取图像
2012-07-06 18:36 946Android SQLite存取图像的简单方法如下: ... -
Android 继承SQLiteOpenHelper自定义DBHelper存取数据与图像
2012-07-10 15:07 1417Android 继承SQLiteOpenHelper自定 ... -
Android 系统菜单与自定义菜单
2012-07-25 16:28 2296Android 系统菜单与自 ...
相关推荐
因为数据库的操作在开发中的重要性是不言而喻的,所以,在数据库这一方面下了很大的功夫,终于掌握了基本的操作,包括建表和删除,对数据库的操作,“增删改查”基本操作,而且用了封装性来实现,是学习数据库的一个...
Android 数据库SQLiteDatabase的使用 1.数据库辅助操作接口SQLiteDatabaseOpenHelper的使用 2.ContentValues的使用 3.数据的增删改查 4.listView 与Adapter的使用 5.OptionsMenu的使用 6.Editext隐藏失去焦点的方法
本教程将深入讲解如何在Android项目中使用SQLite数据库。 首先,我们需要创建一个SQLite数据库。在Android中,我们通过继承`SQLiteOpenHelper`类来实现这个功能。`SQLiteOpenHelper`提供了创建、升级和打开数据库的...
下面将详细介绍如何在Android Studio中使用SQLiteDatabase进行基本的功能与操作。 首先,我们需要在AndroidManifest.xml文件中添加读写权限,以允许应用访问SQLite数据库: ```xml <uses-permission android:name=...
### Android SQLiteDatabase的使用详解 在Android开发过程中,`SQLiteDatabase`是进行本地数据存储的核心类之一,它提供了创建和查询SQLite数据库的方法。SQLite是一种轻量级的嵌入式数据库引擎,广泛应用于移动...
在Android应用中,我们通常不会直接创建数据,而是通过调用`insert()`方法来插入数据。例如: ```java public long insertData(String name, int age) { SQLiteDatabase db = this.getWritableDatabase(); ...
本文将通过一个实例详细介绍如何在Android中使用SQLiteOpenHelper和SQLiteDatabase进行数据库操作。 首先,要使用SQLite数据库,你需要创建一个继承自SQLiteOpenHelper的类。这个类会处理数据库的创建、升级以及...
SQLite是Android系统中内置的关系型数据库,用于存储和管理应用程序中的结构化数据。在这个"SQLiteDataBase简单...在这个实例中,你可以进一步学习如何结合Android组件与SQLite进行数据交互,提升你的Android开发技能。
SQLiteDatabase是Android系统中对SQLite数据库的封装,它是Android SDK的一部分,提供了与SQLite数据库进行交互的接口和类。开发者可以通过SQLiteDatabase来创建、更新、查询和管理数据库。 在Android应用开发中,...
总结一下,本示例"androidDb.rar_ SQLiteDatabase_SQLiteDatabase_android"展示了如何在Android应用中使用SQLite数据库进行数据管理。开发者需要创建`SQLiteOpenHelper`子类,定义数据库版本和表结构,在`onCreate()...
在Android开发中,数据存取是至关重要的环节,XML和SQLite数据库是两种常见的数据存储方式。本教程将详细探讨XML的三种读取技术以及SQLite数据库的基本操作,旨在帮助开发者掌握这两种数据存储方式。 首先,我们来...
本篇文章将详细探讨如何在Android中使用SQLite数据库进行数据的增删改查(CRUD)操作,并介绍与之相关的布局页面编写。 首先,创建SQLite数据库需要实现`SQLiteOpenHelper`的子类。这个类提供了创建和升级数据库的...
在Android开发中,SQLite数据库是应用内存储数据的常用方式,但其原生API使用起来确实相对复杂,涉及很多重复的代码。为了简化这一过程,`wellsql`库应运而生,它是一个专为Android设计的开源项目,旨在让开发者更...
假设我们使用ArrayAdapter,我们需要创建一个自定义的`MyAdapter`类,继承自ArrayAdapter,它会根据数据填充ListView的每个项目。 ```java public class MyAdapter extends ArrayAdapter<String> { public ...
对于SQLite数据,我们通常使用`SimpleCursorAdapter`,它可以直接将SQLite查询结果映射到ListView的各个视图项。 在布局文件中,如`patient_item.xml`,定义ListView的每一项布局,通常包括患者姓名、年龄、性别等...
在Android系统中,数据...综上所述,Android数据存取涉及数据库操作、文件系统管理、网络通信、数据共享以及资源文件的使用,是Android开发中的核心技能,理解并掌握这些知识点对于构建功能丰富的Android应用至关重要。
使用 SQLiteDatabase 操作 SQLite 数据库 代码如下:/* Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除...
Android 数据存储 SQLite Android 数据存储是 Android 应用程序中的一个重要组件,它负责存储和管理应用程序中的数据。在 Android 中,有多种数据存储方式,包括 SharedPreferences、内部文件存储、SD 卡存储和 ...