0

データベース、テーブルを作成し、値の行を挿入するサンプル アプリがあります。

これが私のものMainActivity.javaです:

public class MainActivity extends Activity {

protected static final android.content.Context Context = null;
public String ReadingMode="";

@Override
protected void onCreate(Bundle savedInstanceState) {


             SQLiteDatabase sampleDB =  Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);

             sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
                        "SampleTable " +
                        " (LastName VARCHAR, FirstName VARCHAR," +
                        " Country VARCHAR, Age INT(3));");

             sampleDB.execSQL("INSERT INTO " +
                        "SampleTable " +
                        " Values ('Makam','sample','India',25);");

             sampleDB.close();                       
        }


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

行ごとにデバッグするとNull pointer exception、次の行の近くで発生します。

 SQLiteDatabase sampleDB =  Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null); 

sampleDBnull であり、作成されていないことがわかりますDatabase

私のコードに何か問題がありますか?

4

3 に答える 3

3

nullでコンテキストを初期化しています

protected static final android.content.Context Context = null;

したがって、nullコンテキストを使用している場合は、NPEがスローされます。アクティビティコンテキストでコンテキストを設定してから、コンテキストを使用できます。

Context = MainActivity.this;

またはこれを使用してください

SQLiteDatabase sampleDB =  this.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);
于 2013-03-05T11:06:57.360 に答える
1

として初期化しprotected static final android.content.Context Context = null; 、次にそれをとして使用していますContext.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);

明らかな場合、nullポインタ例外が生成されます。

于 2013-03-05T11:07:24.997 に答える
1

交換する

  SQLiteDatabase sampleDB =  Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);

  SQLiteDatabase sampleDB =  this.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);

理由 :

  1. ActivityのサブクラスなContextので、 を使用できますthis
  2. openOrCreateDatabaseは静的メソッドではないため、クラス名を使用して呼び出すことはできません。
于 2013-03-05T11:10:53.353 に答える