1

LogCat を使用して問題の行を特定しました。

onCreate で実行しようとしている SQL 文字列は..

CREATE TABLE Routines(_id integer primary key autoincrement, json TEXT);

これを実行しようとすると、問題が発生します。

これが原因である可能性がありますNullPointerException。何も問題がないと思われる場合は、もう少し背景を読んでください。

このデータベースはまだ作成されていませんNullpointerException.

ただし、onCreate メソッドを使用する必要があるため、これについて言及します。以下に示すように、メイン コードで新しいDatabaseOpenHelper(拡張 SQliteOpenHelper) を作成し、ヘルパーの open() メソッドを呼び出します。

public void open() throws SQLException
{
    ssDatabase = databaseOpenHelper.getWritableDatabase();
}

データベースが作成されていないため、間違っていなければ(事前にアンインストールして確認しました)。その open() メソッドが呼び出されると、 onCreate SQLiteHelper が呼び出されます。

これは、open メソッドを呼び出すコードです。

    try
    {                   
        dbConnector = new DatabaseConnector (this);
        debug = "2 ";

        // This on first start will invoke the database onCreate method - throws SQLException
        dbConnector.open();  /* PROBLEM LINE */
        debug = "3 ";
    }
    catch (Exception e)
    {
        textView1.setText(debug + e.toString());
    }

そして、これは私の DatabaseOpenHelper と onCreate メソッドを含むコードです

private class DatabaseOpenHelper extends SQLiteOpenHelper
{
    public DatabaseOpenHelper(Context context, String name, CursorFactory factory, int version)
    {
        super(context, name, factory, version); 

        Log.i(TAG, "Constructor");
    }

    // On initial creation of database
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        Log.i(TAG, "Before SQL command");

        String sqlCreateCommand = "CREATE TABLE Routines"
                + "(_id integer primary key autoincrement, "
                + "json TEXT);";

        Log.i(TAG, sqlCreateCommand); 

        // I believe this to be the PROBLEM LINE
        ssDatabase.execSQL(sqlCreateCommand); 

        Log.i(TAG, "Jab done");
    }

    // On upgrade - currently do nothing
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {}      
}   

助けてくれてありがとう!

4

1 に答える 1

4

コメントを投稿するだけの権限がないようです。1 つの質問: --> パラメータが SQLiteDatabase db であるため、ssDatabase.execSQL(sqlCreateCommand); これはすべきではありません。db.execSQL(sqlCreateCommand);次に、_id を使用します。このインデックスはデフォルトでは作成されませんか? これと関係なくても構いません。これはあくまで私の考えでした。:)

于 2012-12-19T13:30:26.180 に答える