1

私はAndroidで接続するためにこのコードを書こうとしています。

public class DataBaseAdapter
{
....
....
    public DataBaseAdapter(Context context)
    {
        contextApp = context;
        myAlarmDB = new MyAlarmDatabase(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    public DataBaseAdapter open() throws SQLException 
    {
        try
        {
            db = myAlarmDB.getWritableDatabase();
        }
        catch (SQLiteException ex)
        {
            db = myAlarmDB.getReadableDatabase();
        }
        return this;
    }
}

コードがopen()メソッドを呼び出すと、Android アプリはエラーで終了します。この特定のコードがコメント化されると、アプリケーションが実行されます。つまり、SQLiteDatabase オブジェクトを自由に作成します。

どうすればいいですか?

これは、接続するクラスのコードですSQLiteOpenHelper

public class MyAlarmDatabase extends SQLiteOpenHelper
{   
    private static final String CREATE_STATEEMENT=
    "create table if not exists AlarmDataBase" +
    "(alarm_id integer primary key auto_increment," +
    " description text," +
    " repeatType integer," +
    " repeatDay text," +
    " millis text)";
    public MyAlarmDatabase(Context context, String name, CursorFactory factory, int version)
    {
            super(context, name, factory, version);
            // TODO Auto-generated constructor stub
    }
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        //db = SQLiteDatabase.openOrCreateDatabase("AlarmManagerDatabase.db", Context.MODE_PRIVATE, null);
        db.execSQL(CREATE_STATEEMENT);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        // TODO Auto-generated method stub
        Log.w("TaskDBAdapter", "Upgrading from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
        // The simplest case is to drop the old table and create a new one.
        db.execSQL("create table alarm_standby as select * from AlarmDataBase");
        db.execSQL("DROP TABLE IF EXISTS AlarmDataBase");
        db.execSQL("create table AlarmDataBase as select * from alarm_standby");
        db.execSQL("drop table alarm_standby");
    }
}
4

1 に答える 1

0

問題はコンテキストの受け渡しにあります。そうしないと、コードが実行されてしまいます。コンテキスト値をデータベース接続クラスに渡す際に誤りがあります。その見返りに、アプリケーションが閉じられます。Database Connection クラスのオブジェクトを作成するコードにコメントを付けると、コードが実行されます。

So it is just that you are making mistake in passing context value.

コードを修正します。

于 2013-03-13T12:20:11.057 に答える