Java 添加了一个包含图像的数据库。。。Can';似乎无法从数据库中调用活动的映像
昨天有一个关于图像大小的问题,在这里的人提出一些建议后,这个问题及时得到了解决。这个问题给我带来了更多的问题 基本上,我已经进一步开发了我的应用程序,现在有一个名为“ChordDB”的按钮,当我点击这个按钮时,我想让它加载我的“ChordImages.java”活动,并显示由某种下拉菜单指定的和弦的“Name”和“Image” 这是我第一次在安卓环境下使用数据库,所以我已经离开了我的舒适区;我知道我的数据库中目前只有一个C和弦的实例,我只是在寻找一些指导,如果我有超过一个项目,我将如何处理这个问题。欢迎任何虚假的例子 这是我的“ChordImages.java”文件:Java 添加了一个包含图像的数据库。。。Can';似乎无法从数据库中调用活动的映像,java,android,database,image,Java,Android,Database,Image,昨天有一个关于图像大小的问题,在这里的人提出一些建议后,这个问题及时得到了解决。这个问题给我带来了更多的问题 基本上,我已经进一步开发了我的应用程序,现在有一个名为“ChordDB”的按钮,当我点击这个按钮时,我想让它加载我的“ChordImages.java”活动,并显示由某种下拉菜单指定的和弦的“Name”和“Image” 这是我第一次在安卓环境下使用数据库,所以我已经离开了我的舒适区;我知道我的数据库中目前只有一个C和弦的实例,我只是在寻找一些指导,如果我有超过一个项目,我将如何处理这个问
package com.finalyearproject;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
public class ChordImages extends Activity {
private MySQLiteHelper DbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chordview);
DbHelper = new MySQLiteHelper(this);
Chords chord_One = new Chords(BitmapFactory.decodeResource(getResources(), R.drawable.tuner_ic), "Chord C");
DbHelper.open();
DbHelper.insertCrdDetails(chord_One);
DbHelper.close();
chord_One = null;
DbHelper.open();
chord_One = DbHelper.retriveCrdDetails();
DbHelper.close();
TextView crdname = (TextView) findViewById(R.id.name);
crdname.setText(chord_One.getName());
ImageView crdphoto = (ImageView) findViewById(R.id.photo);
crdphoto.setImageBitmap(chord_One.getBitmap());
}
}
package com.finalyearproject;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySQLiteHelper {
public static final String CRD_ID = "id";
public static final String CRD_NAME = "name";
public static final String CRD_PHOTO = "photo";
private DatabaseHelper mMySQLiteHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_NAME = "ChordDB.db";
private static final int DATABASE_VERSION = 1;
private static final String CHORD_TABLE = "Chords";
private static final String CREATE_CHORD_TABLE = "create table "
+ CHORD_TABLE + " (" + CRD_ID
+ " integer primary key autoincrement, " + CRD_PHOTO
+ " blob not null, " + CRD_NAME + " text not null unique );";
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_CHORD_TABLE);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + CHORD_TABLE);
onCreate(db);
}
}
public void Reset() {
mMySQLiteHelper.onUpgrade(this.mDb, 1, 1);
}
public MySQLiteHelper(Context ctx) {
mCtx = ctx;
mMySQLiteHelper = new DatabaseHelper(mCtx);
}
public MySQLiteHelper open() throws SQLException {
mDb = mMySQLiteHelper.getWritableDatabase();
return this;
}
public void close() {
mMySQLiteHelper.close();
}
public void insertCrdDetails(Chords chord) {
ContentValues cv = new ContentValues();
cv.put(CRD_PHOTO, Utility.getBytes(chord.getBitmap()));
cv.put(CRD_NAME, chord.getName());
mDb.insert(CHORD_TABLE, null, cv);
}
public Chords retriveCrdDetails() throws SQLException {
Cursor cur = mDb.query(true, CHORD_TABLE, new String[] { CRD_PHOTO, CRD_NAME }, null, null, null, null, null, null);
if (cur.moveToFirst()) {
byte[] blob = cur.getBlob(cur.getColumnIndex(CRD_PHOTO));
String name = cur.getString(cur.getColumnIndex(CRD_NAME));
cur.close();
return new Chords(Utility.getPhoto(blob), name);
}
cur.close();
return null;
}
}
package com.finalyearproject;
import android.graphics.Bitmap;
public class Chords {
private int id;
private String chord;
private Bitmap picture;
public Chords(){}
public Chords(Bitmap picture, String chord) {
super();
this.chord = chord;
this.picture = picture;
}
@Override
public String toString() {
return "Chords [id=" + id + ", chord=" + chord + ", picture=" + picture + "]";
}
public String getName() {
return "Chord Name: " + chord;
}
public Bitmap getBitmap() {
return picture;
}
}
我的“MySQLiteHelper.java”文件:
package com.finalyearproject;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
public class ChordImages extends Activity {
private MySQLiteHelper DbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chordview);
DbHelper = new MySQLiteHelper(this);
Chords chord_One = new Chords(BitmapFactory.decodeResource(getResources(), R.drawable.tuner_ic), "Chord C");
DbHelper.open();
DbHelper.insertCrdDetails(chord_One);
DbHelper.close();
chord_One = null;
DbHelper.open();
chord_One = DbHelper.retriveCrdDetails();
DbHelper.close();
TextView crdname = (TextView) findViewById(R.id.name);
crdname.setText(chord_One.getName());
ImageView crdphoto = (ImageView) findViewById(R.id.photo);
crdphoto.setImageBitmap(chord_One.getBitmap());
}
}
package com.finalyearproject;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySQLiteHelper {
public static final String CRD_ID = "id";
public static final String CRD_NAME = "name";
public static final String CRD_PHOTO = "photo";
private DatabaseHelper mMySQLiteHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_NAME = "ChordDB.db";
private static final int DATABASE_VERSION = 1;
private static final String CHORD_TABLE = "Chords";
private static final String CREATE_CHORD_TABLE = "create table "
+ CHORD_TABLE + " (" + CRD_ID
+ " integer primary key autoincrement, " + CRD_PHOTO
+ " blob not null, " + CRD_NAME + " text not null unique );";
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_CHORD_TABLE);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + CHORD_TABLE);
onCreate(db);
}
}
public void Reset() {
mMySQLiteHelper.onUpgrade(this.mDb, 1, 1);
}
public MySQLiteHelper(Context ctx) {
mCtx = ctx;
mMySQLiteHelper = new DatabaseHelper(mCtx);
}
public MySQLiteHelper open() throws SQLException {
mDb = mMySQLiteHelper.getWritableDatabase();
return this;
}
public void close() {
mMySQLiteHelper.close();
}
public void insertCrdDetails(Chords chord) {
ContentValues cv = new ContentValues();
cv.put(CRD_PHOTO, Utility.getBytes(chord.getBitmap()));
cv.put(CRD_NAME, chord.getName());
mDb.insert(CHORD_TABLE, null, cv);
}
public Chords retriveCrdDetails() throws SQLException {
Cursor cur = mDb.query(true, CHORD_TABLE, new String[] { CRD_PHOTO, CRD_NAME }, null, null, null, null, null, null);
if (cur.moveToFirst()) {
byte[] blob = cur.getBlob(cur.getColumnIndex(CRD_PHOTO));
String name = cur.getString(cur.getColumnIndex(CRD_NAME));
cur.close();
return new Chords(Utility.getPhoto(blob), name);
}
cur.close();
return null;
}
}
package com.finalyearproject;
import android.graphics.Bitmap;
public class Chords {
private int id;
private String chord;
private Bitmap picture;
public Chords(){}
public Chords(Bitmap picture, String chord) {
super();
this.chord = chord;
this.picture = picture;
}
@Override
public String toString() {
return "Chords [id=" + id + ", chord=" + chord + ", picture=" + picture + "]";
}
public String getName() {
return "Chord Name: " + chord;
}
public Bitmap getBitmap() {
return picture;
}
}
我的“chord.java”文件:
package com.finalyearproject;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
public class ChordImages extends Activity {
private MySQLiteHelper DbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chordview);
DbHelper = new MySQLiteHelper(this);
Chords chord_One = new Chords(BitmapFactory.decodeResource(getResources(), R.drawable.tuner_ic), "Chord C");
DbHelper.open();
DbHelper.insertCrdDetails(chord_One);
DbHelper.close();
chord_One = null;
DbHelper.open();
chord_One = DbHelper.retriveCrdDetails();
DbHelper.close();
TextView crdname = (TextView) findViewById(R.id.name);
crdname.setText(chord_One.getName());
ImageView crdphoto = (ImageView) findViewById(R.id.photo);
crdphoto.setImageBitmap(chord_One.getBitmap());
}
}
package com.finalyearproject;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySQLiteHelper {
public static final String CRD_ID = "id";
public static final String CRD_NAME = "name";
public static final String CRD_PHOTO = "photo";
private DatabaseHelper mMySQLiteHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_NAME = "ChordDB.db";
private static final int DATABASE_VERSION = 1;
private static final String CHORD_TABLE = "Chords";
private static final String CREATE_CHORD_TABLE = "create table "
+ CHORD_TABLE + " (" + CRD_ID
+ " integer primary key autoincrement, " + CRD_PHOTO
+ " blob not null, " + CRD_NAME + " text not null unique );";
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_CHORD_TABLE);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + CHORD_TABLE);
onCreate(db);
}
}
public void Reset() {
mMySQLiteHelper.onUpgrade(this.mDb, 1, 1);
}
public MySQLiteHelper(Context ctx) {
mCtx = ctx;
mMySQLiteHelper = new DatabaseHelper(mCtx);
}
public MySQLiteHelper open() throws SQLException {
mDb = mMySQLiteHelper.getWritableDatabase();
return this;
}
public void close() {
mMySQLiteHelper.close();
}
public void insertCrdDetails(Chords chord) {
ContentValues cv = new ContentValues();
cv.put(CRD_PHOTO, Utility.getBytes(chord.getBitmap()));
cv.put(CRD_NAME, chord.getName());
mDb.insert(CHORD_TABLE, null, cv);
}
public Chords retriveCrdDetails() throws SQLException {
Cursor cur = mDb.query(true, CHORD_TABLE, new String[] { CRD_PHOTO, CRD_NAME }, null, null, null, null, null, null);
if (cur.moveToFirst()) {
byte[] blob = cur.getBlob(cur.getColumnIndex(CRD_PHOTO));
String name = cur.getString(cur.getColumnIndex(CRD_NAME));
cur.close();
return new Chords(Utility.getPhoto(blob), name);
}
cur.close();
return null;
}
}
package com.finalyearproject;
import android.graphics.Bitmap;
public class Chords {
private int id;
private String chord;
private Bitmap picture;
public Chords(){}
public Chords(Bitmap picture, String chord) {
super();
this.chord = chord;
this.picture = picture;
}
@Override
public String toString() {
return "Chords [id=" + id + ", chord=" + chord + ", picture=" + picture + "]";
}
public String getName() {
return "Chord Name: " + chord;
}
public Bitmap getBitmap() {
return picture;
}
}
我不确定你的问题是什么。您是否遇到错误/崩溃?如果是这样,张贴日志。不过,我要说的一件事是——不要将图像存储在SQLite数据库中——它可能会处理BLOB类型,但效率不高——将图像保存在资产或原始目录中,只需将图像名称(例如URI)保存在数据库中;我对android开发领域的整个数据库都是新手。我正在寻找更多的指导/建议。@Squonk我基本上希望在ChordImages.java屏幕上有某种下拉菜单或吉他和弦列表,当我选择(例如)“A和弦”时,它将显示一个和弦图像。这有意义吗?如果需要的话,我可以更详细地讲一下。是的……用简洁的形式回答有点困难。首先,您需要查看游标适配器方法-最常用的是
SimpleCursorAdapter
。但是,如果这样做,请将“id”列更改为\u id
(注意前面的下划线)。另外,正如我所说的,不要将图像存储为数据库中的blob,只存储URI或文件名。顺便说一句,我是一名吉他手,所以我知道你想做什么的要点-一个吉他“和弦盒”查找应用,对吗?@Squonk我会研究一下的,谢谢,是的,我有一个吉他调谐器,也在处理这个和弦数据库。我有一个Utility.java文件,它将.PNG图像转换为字节数组,然后在再次调用它们时对它们进行解码