Преобразовать Drawable в BLOB Datatype - PullRequest
1 голос
/ 14 июня 2011
public Drawable icon; \\ Some value in this field

Я создаю базу данных в SQLite Manager.Я хочу сохранить icon в базе данных.Другое поле отображается правильно, но когда я беру поле icon с типом данных BLOB, оно не отображается.

public void prettyPrint() {
public String appname = "asd";
public String pname = "asd";
public String versionName = "asd";
public int versionCode = 0;
public Drawable icon="android.im....";
Insall_app_db i1 = new Insall_app_db();
i1.createDatabse("appInfo3", getBaseContext());
i1.createTable("off_appinfo4", getBaseContext()); i1.insertDataUser("off_appinfo4",  appid ,appname,pname, versionName, versionCode, icon, x);
}


package com.AppInfo;

import java.sql.Blob;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import android.R.drawable;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;

public class Insall_app_db {


SQLiteDatabase sampleDB = null;
String PhoneNumber;
String UserId;
Cursor c;
ArrayList ar=new ArrayList();
public void createDatabse(String DbName,Context context)
{
sampleDB =  context.openOrCreateDatabase(DbName,     
    context.MODE_WORLD_READABLE,null);

}

public void createTable(String Tablename,Context context)
{
    sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
            Tablename +
            "(app_id INT,app_name VARCHAR(255),pname VARCHAR(255),version_name  VARCHAR(25),versionCode  INT,icon BLOB,date DATE);");

}
public void DeleteTable(String Tablename,Context context)
{
    sampleDB.execSQL("DROP TABLE off_appinfo4");

}

public void insertDataUser(String tableName,int app_id,String app_name,String pname,String version_name,int versionCode,String d,long date1)
{

     sampleDB.execSQL("INSERT INTO " +
             tableName +
             " Values ("+app_id+",'"+app_name+"','"+pname+"','"+version_name+"','"+versionCode+"','"+d+"',"+date1+");");


}

public String GetUserData(Context context,String tablename)
{
            c = sampleDB.rawQuery("SELECT User_Id FROM " +
                tablename +
                "", null);

            if(c!=null)
            {
                if(c.moveToFirst())
                {
                    do
                    {
                        UserId=c.getString(c.getColumnIndex("User_Id"));

                    }while(c.moveToNext());



                    }   

                }       

            return UserId;
}

public void close()
{
    sampleDB.close();

}




}

Ответы [ 3 ]

14 голосов
/ 14 июня 2011

Вы можете преобразовать свое изображение в байтовый массив и сохранить этот байтовый массив в BLOB-объекте, хранящемся в базе данных.Вы можете получить ваше изображение обратно из базы данных как байтовый массив.

Как получить байтовый массив из imageview:

ImageView iv = (ImageView) findViewById(R.id.splashImageView);
Drawable d = iv.getBackground();
BitmapDrawable bitDw = ((BitmapDrawable) d);
Bitmap bitmap = bitDw.getBitmap();
System.out.println(".....d....."+d);
System.out.println("...bitDw...."+bitDw);
System.out.println("....bitmap...."+bitmap);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] imageInByte = stream.toByteArray();

Сохранить байтовый массив в базе данных:

ContentValues cv = new ContentValues();
cv.put(CHUNK, buffer); //CHUNK blob type field of your table
long rawId = database.insert(TABLE, null, cv); //TABLE table name

Получить изображение из байтового массива:

public static Bitmap convertByteArrayToBitmap(
    byte[] byteArrayToBeCOnvertedIntoBitMap)
{
    bitMapImage = BitmapFactory.decodeByteArray(
        byteArrayToBeCOnvertedIntoBitMap, 0,
        byteArrayToBeCOnvertedIntoBitMap.length);
    return bitMapImage;
}
0 голосов
/ 02 июля 2014

если вы хотите сохранить несколько изображений в базе данных, вы можете создать собственный метод следующим образом: // извлекаем изображения из drawable в массив int:

int[] IMAGES = { R.drawable.yourimage1, R.drawable.yourimage2, R.drawable.yourimage3,
            R.drawable.yourimage4, R.drawable.yourimage5 }; 

//create method to convert drawable images(which are in int) to byte[] as below:

public byte[] convertToByteArray(int image){

        Resources resources = getResources();
        Drawable drawable = resources.getDrawable(image);
        Bitmap bitmap =  ((BitmapDrawable)drawable).getBitmap();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress( Bitmap.CompressFormat.PNG, 100, stream);
        byte[] bitmapData = stream.toByteArray();

              return bitmapData;

    }

и теперь вызовите этот метод, как показано ниже: byte [] image = convertToByteArray (IMAGES [position]); // dbAdapter.insertValues ​​(изображение);

0 голосов
/ 15 марта 2012

Я внес несколько изменений в ответ выше, чтобы получить массив байтов imageview

ImageView iv = (ImageView) findViewById (R.id.splashImageView);

iv.setDrawingCacheEnabled(true);
        Bitmap bitmap = iv.getDrawingCache();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] bitmapdata = stream.toByteArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...