Использование базы данных SQL, как отображать изображение на основе пользовательского управления в Android Studio - PullRequest
0 голосов
/ 08 мая 2020

В настоящее время я работаю над проектом, в котором база данных SQLite подключена к моему проекту Android Studio. В базе данных в настоящее время есть изображения с предварительно загруженными атрибутами. Например, у нас есть столбцы, показывающие, есть ли на картинке животное, замок. Или если в цвете есть синий, желтый и т. Д. c.

На этом этапе я могу настроить модель счетчика для отображения всех изображений. Хотя это не совсем то, чего я хочу. Что я пытаюсь сделать, так это подключить список опций флажков, которые будут захватывать изображения, соответствующие выбору. Итак, если пользователь хочет изображение с животным, оно желтое. Он будет брать значения из базы данных и отображать их в imageView.

public class MainActivity extends AppCompatActivity {
    private Spinner cmbName;
    private ImageView viewBadgeImage;
    private Button searchButton;
    private CheckBox checkBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize the UI components
        this.cmbName = (Spinner) findViewById(R.id.cmbName);
        this.viewBadgeImage = (ImageView) findViewById(R.id.viewBadgeImage);
        this.searchButton = (Button) findViewById(R.id.searchButton);
        this.checkBox = (CheckBox) findViewById(R.id.checkDateOnCrest);

        // Define final variables since they have to be accessed from inner class
        final DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);

        // Open the database
        databaseAccess.open();

        // Read all the names
        final List<String> names = databaseAccess.getNames();
        final List<String> nameOnCrest = databaseAccess.getDateOnCrest();

        // Close the database
        databaseAccess.close();


        checkBox.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if(checkBox.isChecked()){
                    //Toast.makeText(MainActivity.this, "Checkbox is checked!", Toast.LENGTH_LONG).show();

                }
            }
        });

        // Create adapter and set to the Spinner
        ArrayAdapter < String > adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, names);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        this.cmbName.setAdapter(adapter);

        this.cmbName.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // Get the selected name
                String name = names.get(position);

                // Open the database
                databaseAccess.open();

                // Retrieve the selected image as byte[]
                byte[] data = databaseAccess.getImage(name);
                // Convert to Bitmap
                Bitmap image = toBitmap(data);
                // Set to the imgPlace
                viewBadgeImage.setImageBitmap(image);

                // Close the database
                databaseAccess.close();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // Do nothing
            }
        });
    }

    /**
     * Convert byte[] to Bitmap
     *
     * @param image
     * @return
     */
    public static Bitmap toBitmap(byte[] image) {
        return BitmapFactory.decodeByteArray(image, 0, image.length);
    }

А вот и код доступа к базе данных.

public class DatabaseAccess {
    private SQLiteOpenHelper openHelper;
    private SQLiteDatabase database;
    private static DatabaseAccess instance;

    /**
     * Private constructor to avoid object creation from outside classes.
     */

    private DatabaseAccess(Context context) {
        this.openHelper = new DatabaseOpenHelper(context);
    }

    /**
     * Return a singleton instance of DatabaseAccess.
     *
     * @param context the Context
     * @return the instance of DabaseAccess
     */
    public static DatabaseAccess getInstance(Context context) {
        if (instance == null) {
            instance = new DatabaseAccess(context);
        }
        return instance;
    }

    /**
     * Open the database connection.
     */
    public void open() {
        this.database = openHelper.getWritableDatabase();
    }

    public void close() {
        if (database != null) {
            this.database.close();
        }
    }

    /**
     * Read all quotes from the database.
     *
     * @return a List of quotes
     */
    public List < String > getNames() {
        List < String > list = new ArrayList < > ();
        Cursor cursor = database.rawQuery("SELECT TeamName FROM Badges", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            list.add(cursor.getString(0));
            cursor.moveToNext();
        }
        cursor.close();
        return list;
    }
    /**
    public List < String > getDateOnCrest() {
        List < String > list = new ArrayList < > ();
        Cursor cursor = database.rawQuery("SELECT DateOnCrest FROM Badges WHERE DateOnCrest = 1", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            list.add(cursor.getString(0));
            cursor.moveToNext();
        }
        cursor.close();
        return list;
    }
    **/
    /**
     * Read the BLOB data as byte[]
     *
     * @param name name of the place
     * @return image as byte[]
     */
    public byte[] getImage(String name) {
        byte[] data = null;
        Cursor cursor = database.rawQuery("SELECT Image FROM Badges WHERE TeamName = ?", new String[] {
                name
        });
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            data = cursor.getBlob(0);
            break; // Assumption: name is unique
        }
        cursor.close();
        return data;
    }
}

Любая помощь очень ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...