java需要帮助将图像保存到Android Studio中的SQLite数据库
我有一个安卓 studio应用程序,该应用程序的目的是拍摄硬币正面和背面的照片,然后获取有关硬币的信息。然后,这些信息和图片应该保存到SQLite数据库中
我已经尝试实现了一些技巧,我在这里读到了这些技巧,包括将图像保存为位图,然后将其保存为字节数组,然后将字节数组保存为数据库中的blob
我认为一切都是对的,但当我运行代码时,我得到的弹出窗口基本上是说硬币图片和信息没有保存到数据库中;这在我实现这些图片之前就已经起作用了,所以我知道它们在某种程度上是问题所在
语法中是否有我遗漏的东西?在此方面的任何帮助都将不胜感激
下面是我正在使用的两个java类:
数据库助手。爪哇:
import 安卓.content.ContentValues;
import 安卓.content.Context;
import 安卓.database.Cursor;
import 安卓.database.sqlite.SQLiteDatabase;
import 安卓.database.sqlite.SQLiteOpenHelper;
import 安卓.graphics.Bitmap;
import 安卓.graphics.BitmapFactory;
import 安卓x.annotation.Nullable;
import java.sql.Blob;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class databaseHelper extends SQLiteOpenHelper {
public databaseHelper(Context context) {
super(context, "Userdata.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase DB) {
DB.execSQL(
"create table CoinDetails (info TEXT primary key, type TEXT, quantity TEXT, heads Blob, tails Blob)"
);
}
@Override
public void onUpgrade(SQLiteDatabase DB, int i, int i1) {
DB.execSQL("drop table if exists CoinDetails");
}
public Boolean save_coin_data(String info, String type, String quantity, byte[] heads, byte[] tails) {
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("info", info);
contentValues.put("type", type);
contentValues.put("quantity", quantity);
contentValues.put("heads", heads);
contentValues.put("tails", tails);
long result = DB.insert("CoinDetails", null, contentValues);
if (result == -1) {
return false;
} else {
return true;
}
}
public Boolean update_coin_data(String info, String type, String quantity) {
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("type", type);
contentValues.put("quantity", quantity);
Cursor cursor = DB.rawQuery("Select * from CoinDetails where info = ?", new String[]{info});
if (cursor.getCount() > 0) {
long result = DB.update("CoinDetails", contentValues, "info=?", new String[]{info});
if (result == -1) {
return false;
} else {
return true;
}
} else {
return false;
}
}
public Boolean delete_coin_data(String info) {
SQLiteDatabase DB = this.getWritableDatabase();
Cursor cursor = DB.rawQuery("Select * from CoinDetails where info = ?", new String[]{info});
if (cursor.getCount() > 0) {
long result = DB.delete("CoinDetails", "info=?", new String[]{info});
if (result == -1) {
return false;
} else {
return true;
}
} else {
return false;
}
}
public Cursor get_data() {
SQLiteDatabase DB = this.getWritableDatabase();
Cursor cursor = DB.rawQuery("Select * from CoinDetails", null);
return cursor;
}
public byte[] bitmap_to_bytes(Bitmap bp) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bp.compress(Bitmap.CompressFormat.PNG, 0, stream);
byte[] bytes = stream.toByteArray();
return bytes;
}
}
插入硬币。java:(试图保存到数据库的主代码)
import 安卓x.annotation.NonNull;
import 安卓x.annotation.Nullable;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓.Manifest;
import 安卓.content.ContentValues;
import 安卓.content.Intent;
import 安卓.content.pm.PackageManager;
import 安卓.graphics.Bitmap;
import 安卓.graphics.drawable.BitmapDrawable;
import 安卓.net.Uri;
import 安卓.os.Build;
import 安卓.os.Bundle;
import 安卓.os.Environment;
import 安卓.provider.MediaStore;
import 安卓.view.View;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.ImageView;
import 安卓.widget.Spinner;
import 安卓.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class insert_coin extends AppCompatActivity {
//variables for the camera controls
private static final int PERMISSION_CODE = 1000;
private static final int IMAGE_CAPTURE_CODE = 1001;
int coinFace = 0;
File dir;
Button hCaptureBtn;
ImageView himageView;
Uri himage_uri;
Button tCaptureBtn;
ImageView timageView;
Uri timage_uri;
Bitmap h_bitmap;
Bitmap t_bitmap;
File h_file;
File t_file;
//variables for the database controls
EditText info, type, quantity;
Button save;
databaseHelper DB;
@Override
protected void onCreate(Bundle savedInstanceState) {
//initial code
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insert_coin);
//code for camera controls
// create the path for external storage
File path = Environment.getExternalStorageDirectory();
// create the folder for the images to be saved in
dir = new File(path + "/COindex/");
dir.mkdirs();
himageView = findViewById(R.id.image_view_heads);
hCaptureBtn = findViewById(R.id.capture_image_heads);
hCaptureBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//if system os is >= marshmallow, then get permissions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
coinFace = 1;
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED ||
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED ||
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission not already granted, so get it
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//all permissions need to be granted
String[] permission = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
//pop-up for permission request
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission to write to storage and camera use is needed
String[] permission = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission to read from storage and camera use is needed
String[] permission = {Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission to read/write from/to storage is needed
String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
//only permission to read from storage is needed
String[] permission = {Manifest.permission.READ_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
//only permission for camera use is needed
String[] permission = {Manifest.permission.CAMERA};
requestPermissions(permission, PERMISSION_CODE);
} else {
//only permission to write to storage is needed
String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
}
} else {
//already have permission
openCamera();
}
} else {
//system os < marshmallow
openCamera();
}
}
});
timageView = findViewById(R.id.image_view_tails);
tCaptureBtn = findViewById(R.id.capture_image_tails);
tCaptureBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
coinFace = 2;
//if system os is >= marshmallow, then get permissions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED ||
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED ||
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission not already granted, so get it
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//all permissions need to be granted
String[] permission = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
//pop-up for permission request
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission to write to storage and camera use is needed
String[] permission = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission to read from storage and camera use is needed
String[] permission = {Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//permission to read/write from/to storage is needed
String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
//only permission to read from storage is needed
String[] permission = {Manifest.permission.READ_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
} else if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
//only permission for camera use is needed
String[] permission = {Manifest.permission.CAMERA};
requestPermissions(permission, PERMISSION_CODE);
} else {
//only permission to write to storage is needed
String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permission, PERMISSION_CODE);
}
} else {
//already have permission
openCamera();
}
} else {
//system os < marshmallow
openCamera();
}
}
});
//database control code now
info = findViewById(R.id.info_text);
type = findViewById(R.id.type_text);
quantity = findViewById(R.id.quantity_text);
save = findViewById(R.id.btn_save);
DB = new databaseHelper(this);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text_info = info.getText().toString();
String text_type = type.getText().toString();
String text_quantity = quantity.getText().toString();
byte[] byte_heads = DB.bitmap_to_bytes(h_bitmap);
byte[] byte_tails = DB.bitmap_to_bytes(t_bitmap);
Boolean check_save_data = DB.save_coin_data(text_info, text_type, text_quantity, byte_heads, byte_tails);
if (check_save_data == true) {
Toast.makeText(insert_coin.this, "New Coin(s) Saved", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(insert_coin.this, "New Coin(s) Not Saved", Toast.LENGTH_SHORT).show();
}
}
});
}
public void gotoMain(View view) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
private void openCamera() {
//create camera intent
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);
}
//handle permission from pop-up
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//permission from pop-up = granted
openCamera();
} else {
//permission from pop-up = denied
Toast.makeText(this, "Permission denied.", Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
//gets called when image is captured from camera
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && coinFace == 1) {
Bundle extras = data.getExtras();
h_bitmap = (Bitmap) extras.get("data");
himageView.setImageBitmap(h_bitmap);
} else if (resultCode == RESULT_OK && coinFace == 2) {
Bundle extras = data.getExtras();
t_bitmap = (Bitmap) extras.get("data");
timageView.setImageBitmap(t_bitmap);
}
}
}
共 (0) 个答案