如何将位图类型转换为字符串类型

时间:2019-08-13 11:26:56

标签: android string sqlite bitmap get

在模型类中,我初始化了图像的位图类型。现在我正在实现sqlite的数据存储。我初始化了表列中图像的字符串类型。当我尝试通过使用cursor使用column_id获取详细信息时,获取位图错误

我的课是:

public class ContactsModel {
    public static final String Table_Name="Contacts";

    public static final String Column_Name="Names";
    public static final String Column_Number="Numbers";
    public static final String Column_Photo="Images";
    public static  final String Column_id="Id";

    private String Name;
    private String Number;
    private Bitmap Image;
    private int Id;

    public String Create_Table= "CREATE TABLE" + Table_Name +"("+Column_id+ " INTEGER PRIMARY KEY AUTOINCREMENT" + Column_Name + " TEXT," + Column_Number + " TEXT," + Column_Photo + " BLOB)";
    public ContactsModel(int id,String name,String number,Bitmap image){

        this.Id=id;
        this.Name=name;
        this.Number=number;
        this.Image=image;
    }
}

SqliteOpenHelper类中的get方法是:

public ContactsModel getContact(long id){
    SQLiteDatabase db=getReadableDatabase();
    Cursor cursor=db.query(ContactsModel.Table_Name,new String[]{ContactsModel.Column_Name,ContactsModel.Column_Number,ContactsModel.Column_Photo},ContactsModel.Column_id +"=?",
            new String[]{String.valueOf(id)},null,null,null,null);
    if(cursor!=null){
        cursor.moveToFirst();
    }
    ContactsModel model=new ContactsModel(
            cursor.getInt(cursor.getColumnIndex(ContactsModel.Column_id)),
            cursor.getString(cursor.getColumnIndex(ContactsModel.Column_Name)),
            cursor.getString(cursor.getColumnIndex(ContactsModel.Column_Number)),
            cursor.getString(cursor.getColumnIndex(ContactsModel.Column_Photo)));

    cursor.close();
    return model;
}

由于数据类型原因,尝试使用游标获取图像时方法出现错误。

2 个答案:

答案 0 :(得分:0)

将位图转换为字符串:

public String BitMapToString(Bitmap bitmap){
 ByteArrayOutputStream baos=new  ByteArrayOutputStream();
 bitmap.compress(Bitmap.CompressFormat.PNG,100, baos);
 byte [] b=baos.toByteArray();
 String temp=Base64.encodeToString(b, Base64.DEFAULT);
 return temp;

}

将字符串转换为位图:

public Bitmap StringToBitMap(String encodedString) {
try {
    byte[] encodeByte = Base64.decode(encodedString, Base64.DEFAULT);
    Bitmap bitmap = BitmapFactory.decodeByteArray(encodeByte, 0,
            encodeByte.length);
    return bitmap;
} catch (Exception e) {
    e.getMessage();
    return null;
}

}

答案 1 :(得分:0)

尝试下面的代码,它将为您提供帮助。

public ContactsModel getContact(long id){
SQLiteDatabase db=getReadableDatabase();
Cursor cursor=db.query(ContactsModel.Table_Name,new String[]{ContactsModel.Column_Name,ContactsModel.Column_Number,ContactsModel.Column_Photo},ContactsModel.Column_id +"=?",
        new String[]{String.valueOf(id)},null,null,null,null);
if(cursor!=null){
    cursor.moveToFirst();
    byte[] bytes = Base64.decode(cursor.getString(cursor.getColumnIndex(ContactsModel.Column_Photo)), Base64.DEFAULT);
 Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
        encodeByte.length);
ContactsModel model=new ContactsModel(
        cursor.getInt(cursor.getColumnIndex(ContactsModel.Column_id)),
        cursor.getString(cursor.getColumnIndex(ContactsModel.Column_Name)),
        cursor.getString(cursor.getColumnIndex(ContactsModel.Column_Number)),
        bitmap);

   cursor.close();
   return model;
}


}