有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案