» 首頁 » 討論區 » Android程式設計 »sqlite存放圖片

sqlite存放圖片

發表人: 訪客
發表時間: 2011-11-06 15:06:51
你好,程式改成這樣

[sea:javaCode]
private Button.OnClickListener onClickBtnQuery = new Button.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub

Cursor c = null;

if (mEdtTeacher.getText().toString() == null == false) {
c = database.query(true, TABLE_FILENAME, new String[]{"name\n", "response\n","photo\n"},
"name=" + "\"" + mEdtTeacher.getText().toString() + "\"",null, null, null, null, null);
}

if (c == null)
return;

else {
try
{
if(c.moveToFirst())
{
do
{
byte[] photo = c.getBlob(3);
Bitmap bmp = BitmapFactory.decodeByteArray(photo, 0, photo.length);
mImage.setImageBitmap(bmp);
}while(c.moveToNext());
}

}

finally
{
c.close();
}
}
}
};
[/sea]

我是輸入文字串後,
在資料庫找相對應的圖片
但輸入文字串案BUTTON後
會出現"未正常終止"
資料庫有四個欄位
一:_id(text)
二:name(text)
三:response(text)
四:photo(BLOB)
資料庫裡的圖片以.bmp存入(BLOB類型)
不知道是資料庫查詢(cursor c)那邊有誤
或是do...while...那邊有誤?

這是在手機上執行
所以有寫一個從電腦複製DB到SD卡上的程式
不知道有存入圖片的資料庫是否也可以複製過去呢?
發表人: Seachaos
積分: 2432
發表時間: 2011-11-08 01:23:47
你存入的Code可以貼給我看一下嗎?
也許問題有可能是在存入的時候出錯了
發表人: 訪客
發表時間: 2011-11-08 19:46:41
你是,請問是指存入圖片的Code嗎?
如果是的話,我是用Sqlite的軟體(SQLite Expert)建一個DB
然後直接鍵入資料,圖片也是直接放進去

若是只複製到SD的Code,為以下:

[sea:javaCode]
private SQLiteDatabase openDatabase()
{
try
{
//String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
//File dir = new File(DATABASE_PATH);
File SDCardpath = android.os.Environment.getExternalStorageDirectory();
File myDataPath = new File(SDCardpath.getAbsolutePath()+PATH);
String databaseFilename = myDataPath+ "/" + DATABASE_FILENAME;

Log.i("DB","DB_DIR: "+myDataPath);
Log.i("DB","DB_FILE: "+databaseFilename);
Log.i("DB","DB_DIR_?: "+ myDataPath.exists());

if (!myDataPath.exists()) {
myDataPath.mkdirs();
}
Log.i("DB","DB_DIR_After?: "+myDataPath.exists());
Log.i("DB","DB_FILE_?: "+(new File(databaseFilename)).exists());
if (!(new File(databaseFilename)).exists())
{
InputStream is = getResources().openRawResource(R.raw.manage);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
Log.i("DB","DB_FILE_After?: "+(new File(databaseFilename)).exists());
//SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
SQLiteDatabase database = SQLiteDatabase.openDatabase(databaseFilename, null, RESULT_OK);
return database;
}
catch (Exception e)
{
Log.i("DB","DB_DIR_Exception: ");
}
return null;
}
[/sea]
發表人: Seachaos
積分: 2432
發表時間: 2011-11-10 13:11:49
嗯… 目前看來都ok
我想有兩個地方比較有問題
1. 你匯入的Blob有問題,看一下Load出來的Bytes length是多少?
2. 把
[sea:javaCode]
byte[] photo = c.getBlob(3);
Bitmap bmp = BitmapFactory.decodeByteArray(photo, 0, photo.length);
mImage.setImageBitmap(bmp);
[/sea]
先拿掉看看,改取其他的String,看程式是否會正常;如果正常那有可能是bytes部份出了問題,如果不正常就是其他地方有問題(可能是DB方面)
發表人: 訪客
發表時間: 2011-11-10 14:52:15
你好,圖片用BLOB類型與BINARY類型存,兩者會有差嗎?
發表人: Seachaos
積分: 2432
發表時間: 2011-11-11 02:52:26
blob就是Binary了
嗯… 你可以試看看在onClickBtnQuery裡放Log來追看看是那邊出了錯
因我沒有你的Database也不太清楚
但你可以用Log + DDMS來看錯誤點,把他找出來看看