Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加了一个包含图像的数据库。。。Can';似乎无法从数据库中调用活动的映像_Java_Android_Database_Image - Fatal编程技术网

Java 添加了一个包含图像的数据库。。。Can';似乎无法从数据库中调用活动的映像

Java 添加了一个包含图像的数据库。。。Can';似乎无法从数据库中调用活动的映像,java,android,database,image,Java,Android,Database,Image,昨天有一个关于图像大小的问题,在这里的人提出一些建议后,这个问题及时得到了解决。这个问题给我带来了更多的问题 基本上,我已经进一步开发了我的应用程序,现在有一个名为“ChordDB”的按钮,当我点击这个按钮时,我想让它加载我的“ChordImages.java”活动,并显示由某种下拉菜单指定的和弦的“Name”和“Image” 这是我第一次在安卓环境下使用数据库,所以我已经离开了我的舒适区;我知道我的数据库中目前只有一个C和弦的实例,我只是在寻找一些指导,如果我有超过一个项目,我将如何处理这个问

昨天有一个关于图像大小的问题,在这里的人提出一些建议后,这个问题及时得到了解决。这个问题给我带来了更多的问题

基本上,我已经进一步开发了我的应用程序,现在有一个名为“ChordDB”的按钮,当我点击这个按钮时,我想让它加载我的“ChordImages.java”活动,并显示由某种下拉菜单指定的和弦的“Name”和“Image”

这是我第一次在安卓环境下使用数据库,所以我已经离开了我的舒适区;我知道我的数据库中目前只有一个C和弦的实例,我只是在寻找一些指导,如果我有超过一个项目,我将如何处理这个问题。欢迎任何虚假的例子

这是我的“ChordImages.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;
    }
}
我的“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图像转换为字节数组,然后在再次调用它们时对它们进行解码