【发布时间】:2019-06-03 17:06:54
【问题描述】:
我正在尝试从用户那里获取一些数据,包括相机拍摄的照片,然后将其插入数据库(缩略图),然后检索它以供稍后查看。 1- I used this and this
这是响应用户输入的 OnclickListener。
sginUpButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String Fname = fn.getText().toString();
String Lname = ln.getText().toString();
String Email = em.getText().toString();
String Pass = pass.getText().toString();
String mobile = mob.getText().toString();
if(fn.length()!=0 && ln.length()!=0 && em.length()!=0 && pass.length()!=0&& mob.length()!=0)
{
AddData(Fname,Lname,Email,Pass,mobile,byteArray);
fn.setText("");
ln.setText("");
em.setText("");
pass.setText("");
mob.setText("");
Intent fromLoginToSignup = new Intent(SignUpScreen.this, Profile.class);
notification();
}
else
{
toastmessage("lazem temla kol al fara3'at");
}
}
});
最后,这是它在数据库中插入的部分,我认为在插入的图像方面存在实际错误。
public void onCreate(SQLiteDatabase db) {
String createTable="CREATE TABLE "+ TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT , "
+ FN + " TEXT , "
+ LN + " TEXT ,"
+ E_M + " TEXT ,"
+ PASS + " TEXT ,"
+ Mobnum + " INTEGER, "
+ image + " BLOB)";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean addData(String FirstName,String LastName,String Email,String Password,String MobileNumber, byte[] Profileimg) //to write into the datbase
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv =new ContentValues();
cv.put(FN,FirstName);
cv.put(LN,LastName);
cv.put(E_M,Email);
cv.put(PASS,Password);
cv.put(Mobnum,MobileNumber);
cv.put(image, Profileimg);
Log.d(DATABASE_NAME,"adding : " + FirstName + " TO " + TABLE_NAME );
long result=db.insert(TABLE_NAME,null,cv);
//if the result inserted correctly or not
if(result==-1)
{
return false;
}
else
{
return true;
}
}
我在网上获得了这两个函数,所以我认为将它们放在这里很重要,但我认为它们与错误有关,但我不能确定
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
img.setImageBitmap(photo);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
}
}
【问题讨论】:
-
请不要发布代码、XML 或 logcat 输出的屏幕截图。请将所有文本作为文本发布。此外,将图像存储在数据库中通常不是一个好主意。将它们保存为存储中的文件,并将它们的路径存储在数据库中。
-
@MikeM。是的,我从其他来源收集了尽可能多的信息,但鉴于时间限制,我必须这样做。
-
问题在于如何检索图像,因为您将图像放在字符串列表中,尝试检索并将其放置在列表视图中。将图像插入数据库。将位图转换为 byte[] 以从数据库中检索。将 byte[] 转换为位图。
-
更好地将图像名称保存到数据库并将图像保存在存储中,只要确定路径就可以很容易地从数据库调用
-
@jhayjhay 关于我插入图片的部分,我将其转换为 byte[],你会在最后一张图片中找到它。关于检索图像,我不确定你的意思,但我试图将它放在列表视图中,并且在我发布的另外 2 个 SO 问题中,它成功了。