В настоящее время я работаю над проектом, в котором база данных 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;
}
}
Любая помощь очень ценится!