0

AndroidアクティビティでSQLデータベースを使用する方法を学んでいます。私はこのチュートリアルから学んでいます。チュートリアルから、データベースハンドラーを使用するアクティビティがあります。アクティビティクラス内で変数を宣言します。

DatabaseHandler db;

oncreateメソッドで、新しいDatabaseHandlerオブジェクトを作成します。

DatabaseHandler db = new DatabaseHandler(this);

ボタンがクリックされた後にデータベースを使用したい。そのため、onClickメソッドで接続を使用しますが、onclickで新しいオブジェクトを作成しない限り、nullポインター例外が発生します。その理由は、さまざまなタイプのオブジェクトを使用して、この例で行ったように変数を宣言できるからです。

DatabaseHandlerのコンストラクターは次のとおりです。

 public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

スーパーはSQLiteOpenHelperです。

4

1 に答える 1

1

正しくインスタンス化していないため、null 例外が発生しています。データベースをフィールドとして宣言しましたが、別のオブジェクトDatabaseHandler db = new DatabaseHandler(this);<-- をローカル変数としてインスタンス化しました。したがって、onClick はインスタンス化されていないフィールドにのみアクセスできます。修正するには、oncreate で持っているものをこれに置き換える必要があります。

db = new DatabaseHandler(this);

または、onClick が onCreate にある場合は、final 修飾子を適用します。(およびフィールド オブジェクトの削除)

于 2012-11-17T20:02:26.907 に答える