转换绘制对象为BLOB数据类型 [英] Convert Drawable to BLOB Datatype

查看:208
本文介绍了转换绘制对象为BLOB数据类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 市民可绘制图标; \\一些价值在这一领域
 

我创造的SQLite管理数据库。我想存储图标到数据库中。另一场是正确显示,但是当我把图标字段的数据类型 BLOB ,它不显示。

 公共无效prettyPrint(){
公共字符串APPNAME =ASD;
公共字符串PNAME =ASD;
公共字符串VERSIONNAME =ASD;
公众诠释版本code = 0;
市民可绘制图标=android.im ......;
Insall_app_db I1 =新Insall_app_db();
i1.createDatabse(appInfo3,getBaseContext());
i1.createTable(off_appinfo4,getBaseContext()); i1.insertDataUser(off_appinfo4的appid,应用程序的名字,PNAME,VERSIONNAME,版本code,图标,X);
}


包com.AppInfo;

进口的java.sql.Blob;
进口java.text.SimpleDateFormat的;
进口的java.util.ArrayList;
进口java.util.Date;

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

公共类Insall_app_db {


SQLiteDatabase SAMPLEDB = NULL;
字符串联系号码;
字符串userid;
光标C;
ArrayList的AR =新的ArrayList();
公共无效createDatabse(字符串DBNAME,上下文语境)
{
SAMPLEDB = context.openOrCreateDatabase(数据库,
    context.MODE_WORLD_READABLE,NULL);

}

公共无效CREATETABLE(字符串表名,上下文语境)
{
    sampleDB.execSQL(CREATE TABLE IF NOT EXISTS+
            表名+
            (APP_ID INT,APP_NAME VARCHAR(255),PNAME VARCHAR(255),VERSION_NAME VARCHAR(25),版本code INT,图标BLOB,日期DATE););

}
公共无效DeleteTable(字符串表名,上下文语境)
{
    sampleDB.execSQL(DROP TABLE off_appinfo4);

}

公共无效insertDataUser(字符串tableName值,INT APP_ID,字符串APP_NAME,字符串PNAME,字符串VERSION_NAME,诠释版本code,字符串研发,长日期1)
{

     sampleDB.execSQL(插入+
             tableName值+
             值(+ APP_ID +,+ APP_NAME +,+ PNAME +,+ VERSION_NAME +,+版本code +,+ D +',+ DATE1 + ););


}

公共字符串GetUserData(上下文的背景下,字符串表名)
{
            C = sampleDB.rawQuery(选择USER_ID FROM+
                表名+
                , 空值);

            如果(C!= NULL)
            {
                如果(c.moveToFirst())
                {
                    做
                    {
                        用户ID = c.getString(c.getColumnIndex(USER_ID));

                    }而(c.moveToNext());



                    }

                }

            返回用户ID;
}

公共无效的close()
{
    sampleDB.close();

}




}
 

解决方案

您可以将您的图像转换成字节数组,并存储字节组中的BLOB提交数据库。您可以检索您的图片从数据库返回的字节数组。

如何获得字节数组从ImageView的:

  ImageView的IV =(ImageView的)findViewById(R.id.splashImageView);
绘制对象D = iv.getBackground();
BitmapDrawable bitDw =((BitmapDrawable)D);
点阵位图= bitDw.getBitmap();
的System.out.println(.....Ð.....+ D);
的System.out.println(... bitDw ......+ bitDw);
的System.out.println(....位......+位图);
ByteArrayOutputStream流=新ByteArrayOutputStream();
bitmap.com preSS(Bitmap.Com pressFormat.JPEG,100,流);
byte []的imageInByte = stream.toByteArray();
 

在数据库中

存储字节数组:

  ContentValues​​ CV =新ContentValues​​();
cv.put(块时,缓冲区); // CHUNK BLOB类型的表中的字段
长rawId = database.insert(表,空,CV); // table表名
 

检索图像从字节数组:

 公共静态位图convertByteArrayToBitmap(
    byte []的byteArrayToBeCOnvertedIntoBitMap)
{
    BitmapImage的= BitmapFactory.de codeByteArray(
        byteArrayToBeCOnvertedIntoBitMap,0,
        byteArrayToBeCOnvertedIntoBitMap.length);
    返回的BitmapImage;
}
 

public Drawable icon; \\ Some value in this field

I am creating a database in SQLite Manager. I want to store icon into the database. Another field is shown correctly, but when I take the icon field with datatype BLOB, it doesn't display.

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();

}




}

解决方案

You can convert your image into byte array and store that bytearray in blob filed in database. You can retrieve your image back from database as byte array.

How to get byte array from 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();

Store byte array in database:

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

Retrieve image from byte array:

public static Bitmap convertByteArrayToBitmap(
    byte[] byteArrayToBeCOnvertedIntoBitMap)
{
    bitMapImage = BitmapFactory.decodeByteArray(
        byteArrayToBeCOnvertedIntoBitMap, 0,
        byteArrayToBeCOnvertedIntoBitMap.length);
    return bitMapImage;
}

这篇关于转换绘制对象为BLOB数据类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆