移动开发Android中SQlite数据库存取Bitmap
来源:互联网 发布:jsp购物系统源码 编辑:程序博客网 时间:2024/06/04 23:50
package cn.com;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import cn.db.DBservice;
import cn.db.Photo;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button mButton;
private Bitmap mBitmap;
private ImageView mImageView;
private boolean isDownload=true;
private boolean isSave=false;
private boolean isLoadFromDB=false;
private static final int DOWNLOAD_FINISH=88;
private byte[] photoByte;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton=(Button) findViewById(R.id.button);
mButton.setOnClickListener(new ButtonOnClickListener());
mImageView=(ImageView) findViewById(R.id.imageView);
}
private class ButtonOnClickListener implements View.OnClickListener{
public void onClick(View v) {
if (isDownload) {
new Thread(){
public void run() {
mBitmap=getBitmap("http://s12.sinaimg.cn/middle/4b181bd0gbf6cb07c2a1b&690");
handler.sendEmptyMessage(DOWNLOAD_FINISH);
}
}.start();
}
if (isSave) {
DBservice service=new DBservice(MainActivity.this);
Photo photo=new Photo(1,mBitmap);
service.save(photo,photoByte);
isLoadFromDB=true;
isSave=false;
mButton.setText("从数据库中加载bitmap");
mImageView.setImageBitmap(null);
return;
}
if (isLoadFromDB) {
DBservice service=new DBservice(MainActivity.this);
Photo photo=service.find(1);
mImageView.setImageBitmap(photo.getPhoto());
}
}
}
Handler handler=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case DOWNLOAD_FINISH:
mImageView.setImageBitmap(mBitmap);
mButton.setText("保存图片至SQLite");
isDownload=false;
isSave=true;
break;
default:
break;
}
};
};
public Bitmap getBitmap(String imagePath) {
try {
URL imageUrl = new URL(imagePath);
HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestMethod("POST");
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
photoByte= readResource(inputStream);
Bitmap bitmap=BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length);
return bitmap;
}
} catch (Exception e) {
}
return null;
};
public byte[] readResource(InputStream inputStream){
try {
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
byte [] buffer=new byte[1024];
int len=0;
while( (len=inputStream.read(buffer))!=-1){
outputStream.write(buffer,0,len);
}
inputStream.close();
outputStream.close();
return outputStream.toByteArray();
} catch (Exception e) {
}
return null;
}
}
DataBaseOpenHelper.java如下:
package cn.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseOpenHelper extends SQLiteOpenHelper {
public DataBaseOpenHelper(Context context) {
super(context, "testbold.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table test(photoid integer primary key autoincrement,id ingeter(10),photo Blob(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
DBservice.java如下:
package cn.db;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class DBservice {
private DataBaseOpenHelper openHelper;
public DBservice(Context context) {
openHelper=new DataBaseOpenHelper(context);
}
public void save(Photo photo,byte [] photoByte){
SQLiteDatabase db=openHelper.getWritableDatabase();
db.execSQL("insert into test (id,photo) values(?,?)",new Object[]{photo.getId(),photoByte});
db.close();
}
public Photo find(int i){
SQLiteDatabase db=openHelper.getWritableDatabase();
Cursor cursor=db.rawQuery("select * from test where photoid=?", new String[]{String.valueOf(i)});
while(cursor.moveToFirst()){
int photoid=cursor.getInt(cursor.getColumnIndex("photoid"));
byte[] photoByte=cursor.getBlob(cursor.getColumnIndex("photo"));
Bitmap bitmap=BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length);
Photo photo=new Photo(photoid, bitmap);
return photo;
}
cursor.close();
db.close();
return null;
}
}
Photo.java如下:
package cn.db;
import android.graphics.Bitmap;
public class Photo {
private int id;
private Bitmap bitmap;
public Photo() {
}
public Photo(int id, Bitmap bitmap) {
super();
this.id = id;
this.bitmap = bitmap;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Bitmap getPhoto() {
return bitmap;
}
public void setPhoto(Bitmap bitmap) {
this.bitmap = bitmap;
}
}
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="下载图片"
/>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
</RelativeLayout>
manifest.xml如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.com"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import cn.db.DBservice;
import cn.db.Photo;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button mButton;
private Bitmap mBitmap;
private ImageView mImageView;
private boolean isDownload=true;
private boolean isSave=false;
private boolean isLoadFromDB=false;
private static final int DOWNLOAD_FINISH=88;
private byte[] photoByte;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton=(Button) findViewById(R.id.button);
mButton.setOnClickListener(new ButtonOnClickListener());
mImageView=(ImageView) findViewById(R.id.imageView);
}
private class ButtonOnClickListener implements View.OnClickListener{
public void onClick(View v) {
if (isDownload) {
new Thread(){
public void run() {
mBitmap=getBitmap("http://s12.sinaimg.cn/middle/4b181bd0gbf6cb07c2a1b&690");
handler.sendEmptyMessage(DOWNLOAD_FINISH);
}
}.start();
}
if (isSave) {
DBservice service=new DBservice(MainActivity.this);
Photo photo=new Photo(1,mBitmap);
service.save(photo,photoByte);
isLoadFromDB=true;
isSave=false;
mButton.setText("从数据库中加载bitmap");
mImageView.setImageBitmap(null);
return;
}
if (isLoadFromDB) {
DBservice service=new DBservice(MainActivity.this);
Photo photo=service.find(1);
mImageView.setImageBitmap(photo.getPhoto());
}
}
}
Handler handler=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case DOWNLOAD_FINISH:
mImageView.setImageBitmap(mBitmap);
mButton.setText("保存图片至SQLite");
isDownload=false;
isSave=true;
break;
default:
break;
}
};
};
public Bitmap getBitmap(String imagePath) {
try {
URL imageUrl = new URL(imagePath);
HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestMethod("POST");
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
photoByte= readResource(inputStream);
Bitmap bitmap=BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length);
return bitmap;
}
} catch (Exception e) {
}
return null;
};
public byte[] readResource(InputStream inputStream){
try {
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
byte [] buffer=new byte[1024];
int len=0;
while( (len=inputStream.read(buffer))!=-1){
outputStream.write(buffer,0,len);
}
inputStream.close();
outputStream.close();
return outputStream.toByteArray();
} catch (Exception e) {
}
return null;
}
}
DataBaseOpenHelper.java如下:
package cn.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBaseOpenHelper extends SQLiteOpenHelper {
public DataBaseOpenHelper(Context context) {
super(context, "testbold.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table test(photoid integer primary key autoincrement,id ingeter(10),photo Blob(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
DBservice.java如下:
package cn.db;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class DBservice {
private DataBaseOpenHelper openHelper;
public DBservice(Context context) {
openHelper=new DataBaseOpenHelper(context);
}
public void save(Photo photo,byte [] photoByte){
SQLiteDatabase db=openHelper.getWritableDatabase();
db.execSQL("insert into test (id,photo) values(?,?)",new Object[]{photo.getId(),photoByte});
db.close();
}
public Photo find(int i){
SQLiteDatabase db=openHelper.getWritableDatabase();
Cursor cursor=db.rawQuery("select * from test where photoid=?", new String[]{String.valueOf(i)});
while(cursor.moveToFirst()){
int photoid=cursor.getInt(cursor.getColumnIndex("photoid"));
byte[] photoByte=cursor.getBlob(cursor.getColumnIndex("photo"));
Bitmap bitmap=BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length);
Photo photo=new Photo(photoid, bitmap);
return photo;
}
cursor.close();
db.close();
return null;
}
}
Photo.java如下:
package cn.db;
import android.graphics.Bitmap;
public class Photo {
private int id;
private Bitmap bitmap;
public Photo() {
}
public Photo(int id, Bitmap bitmap) {
super();
this.id = id;
this.bitmap = bitmap;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Bitmap getPhoto() {
return bitmap;
}
public void setPhoto(Bitmap bitmap) {
this.bitmap = bitmap;
}
}
main.xml如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="下载图片"
/>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
</RelativeLayout>
manifest.xml如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.com"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- 移动开发Android中SQlite数据库存取Bitmap
- Android中SQlite数据库存取Bitmap(二)
- Android中SQlite数据库存取Bitmap(一)
- 向数据库中存取图片(BITMAP)
- 向数据库中存取图片(BITMAP)
- Android SQLite 数据库 存取 BLOB 二进制 文件
- Android-sqlite数据库存取图片信息
- Android-sqlite数据库存取图片信息
- Android SQLite 数据库 存取 BLOB 二进制
- Android:在sqlite中存取时间
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android开发中使用SQLite 数据库
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- 杭电2546题解题报告及01背包问题
- JQuery学习(6)调用正则判断输入内容
- uva 11624 - Fire!
- 黑马程序员_java的IO流(对第十九课字符缓冲区及装饰设计模式的总结)
- 常用的Zend Studio for Eclipse快捷键
- 移动开发Android中SQlite数据库存取Bitmap
- django入门笔记-2
- Oracle中index by binary_integer的作用
- Timer详解
- 线程同步的例子
- 从尾到头输出链表
- 当出现Magento搜索功能不可用时的处理
- Linux下查看文件内容的命令
- UDP穿透NApT的原理与实现之P2P篇---cone nat