在模型类中,我初始化了图像的位图类型。现在我正在实现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;
}
由于数据类型原因,尝试使用游标获取图像时方法出现错误。
答案 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;
}
}