我是android的初学者我正在制作一个应用程序在sqlite数据库中插入数据,并且我在将记录添加到数据库时有一个空指针异常
此代码从imageview获取图片并将其转换为位图然后转换为字节以保存它 任何建议,以避免这种例外 这是代码
imageView1.setDrawingCacheEnabled(true);
imageView1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
imageView1.layout(0, 0, imageView1.getMeasuredWidth(), imageView1.getMeasuredHeight());
imageView1.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(imageView1.getDrawingCache());
imageView1.setDrawingCacheEnabled(false);
save_picture=loginDataBaseAdapter.getBytes(b);
loginDataBaseAdapter.insertEntry(userName, password, save_picture);
Toast.makeText(getApplicationContext(), "Record created ", Toast.LENGTH_LONG).show();`}
有将位图转换为字节
的方法// convert from bitmap to byte array
public byte[] getBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, stream);
return stream.toByteArray();
}
并且有插入方法
public void insertEntry(String userName,String password , byte[] photo )
{
ContentValues newValues = new ContentValues();
// Assign values for each row.
newValues.put("USERNAME", userName);
newValues.put("PASSWORD",password);
newValues.put("Photo", photo);
// Insert the row into your table
db.insert("LOGIN", null, newValues);
}
并且有数据库创建
static final String DATABASE_CREATE = "create table "+"LOGIN"+
"( " +"ID"+" integer primary key autoincrement,"+ "USERNAME text,PASSWORD text, Photo blob not null); ";
谢谢
答案 0 :(得分:0)
使用此类将位图转换为byteArray:
public class Utility {
// convert from bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, stream);
return stream.toByteArray();
}
// convert from byte array to bitmap
public static Bitmap getPhoto(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
} 并进入InsertEntry方法:
newValues.put(G_PHOTO, Utility.getBytes(image));
答案 1 :(得分:0)
尝试将位图保存在base64表单字符串中,然后将其插入数据库。 因此,您的getBytes方法将是getBase64Picture,并且将类似于:
public String getBase64StrFromPicture(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, stream);
String imageEncoded = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);
return imageEncoded;
}
然后,要检索您的图片,在查询之后您可以使用相反的步骤,也就是将您的字符串图片转换为位图!
public Bitmap getBitmapFromBase64Str(){
byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
return decodedByte;
}
答案 2 :(得分:0)
getDrawingCache
总是返回null ,因此空指针异常
为避免此错误,我使用此方法
public static Bitmap loadBitmapFromView(View v) {
Bitmap bi = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bi);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
return bi;
}
感谢您的指导:)