我正在为客户创建一个应用程序来存储他们的图像和细节。我正在通过相机或SD卡浏览图像。我通过sdcard在ImageView
中获取图像,但是当我将其插入数据库时,它不会插入数据库中的image列。
我点击SD卡按钮浏览图像。现在,此图片显示在ImageView
。
Button btnsdcard = (Button) findViewById(R.id.custbtnimage);
btnsdcard.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, ACTIVITY_SELECT_IMAGE);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
try {
InputStream imgstream = getContentResolver()
.openInputStream(selectedImage);
Bitmap btm = BitmapFactory.decodeStream(imgstream);
ImageView img = (ImageView) findViewById(R.id.imagecust);
img.setImageBitmap(btm);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
btm.compress(Bitmap.CompressFormat.PNG, 100, bo);
byte[] custimage = bo.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "file not fount",
Toast.LENGTH_SHORT).show();
}
} }
}
现在,当我点击数据库中的保存按钮othewr数据存储但数据库中的图像列为空时,我没有收到任何错误。
btnsave.setOnClickListener(new OnClickListener() {
@SuppressLint("ParserError")
public void onClick(View v) {
// TODO Auto-generated method stub
String name = custname.getText().toString();
String address = custaddress.getText().toString();
Long pincode = Long.parseLong(custpincode.getText().toString());
String city = custcity.getText().toString();
byte[] image=custimage;
Customerprofile profile = new Customerprofile();
profile.setName(name);
profile.setAddress(address);
profile.setPincode(pincode);
profile.setCity(city);
profile.setImage(image);
insertcust(profile);
}
private void insertcust(Customerprofile profile) {
// TODO Auto-generated method stub
DatabaseHelper mydbhelper = new DatabaseHelper(Myimage.this);
SQLiteDatabase db = mydbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseHelper.KEY_NAME, profile.getName());
values.put(DatabaseHelper.KEY_ADDRESS, profile.getAddress());
values.put(DatabaseHelper.KEY_PINCODE, profile.getPincode());
values.put(DatabaseHelper.KEY_CITY, profile.getCity());
values.put(DatabaseHelper.KEY_IMAGE, profile.getImage());
long adcid = db.insert(DatabaseHelper.DATABASE_TABLE, null,
values);
db.close();
}
});
}
任何人都可以帮我解决将ImageView
图像存储在数据库中的问题。
答案 0 :(得分:0)
您确实应该将图像存储在除DB之外的其他位置,然后将路径放在数据库中。
如果你真的想把它放在数据库中,你需要创建一个BLOB
类型的列来存储它(我提到这个,因为你没有显示你的数据库结构)。
然后,您需要将图像转换为字节数组,然后将其保存到数据库中。仔细查看您的代码,看起来您正在做所有这些...
找到你的问题。您正在使用局部变量,然后尝试在其范围之外引用它们。您的byte[] custimage = bo.toByteArray();
中有onActivityResult
,但当byte[] image=custimage;
超出范围时,请尝试在onClick
中使用custimage
。
将byte[] custimage;
声明为类字段,以便所有方法都可以访问onActivityResult
,将custimage = bo.toByteArray();
中的出现更改为{{1}},它应该开始工作。