Android使用SQLiteDatabase直接存取数据与图像
2012-07-10 15:15
411 查看
Android使用SQLiteDatabase直接存取数据与图像的简单方法如下:
main.xml
开发环境:XP3+Eclipse+Android2.2+JDK6.0
测试环境:Android2.2,5寸屏,分辨率640X480
源代码:http://download.csdn.net/detail/xinzheng_wang/4420817
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:使用SQLite存取数据
- Android 继承SQLiteOpenHelper自定义DBHelper存取数据与图像
- android(19)_数据存储与访问_SQLite数据库_使用SQLiteDatabase提供的增删改查方法
- android(18)_数据存储与访问_SQLite数据库_使用SQLiteDatabase操作SQLite数据库及事务
- Android 继承SQLiteOpenHelper自定义DBHelper存取数据与图像
- Android学习小Demo(16)Android中使用已存在数据的SqliteDatabase
- 使用云(BAE)实现android应用数据的远程存取(MySQL)
- Android-使用ListView把SQLite中的数据显示至屏幕
- 野人学Android基础篇之数据存储第一课--SQLite的使用及注意点
- Android开发笔记(二十九)使用SharedPreferences存取数据
- Android 中 使用 openFileOutput 和 openFileInput 存取数据
- 数据库中插入数据错误 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
- Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!
- Android 数据库SQLiteDatabase的使用
- Android使用SQLiteDatabase操作SQLite数据库
- SQlite存取图像数据总结
- Android开发学习笔记:数据存取之SQLite浅析
- Android 使用SQLite进行数据的增删查改
- Android数据库(SQLiteDatabase)使用小结