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); 

我看到那sampleDB是空的并且Database没有被创建。

我的代码有什么问题吗?

4

3 回答 3

3

你正在用 null 初始化你的 Context

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

所以当你使用你的 null Context 时,它会抛出一个 NPE,你可以用你的 Activity Context 设置你的 Context 然后使用你的 Context

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);

很明显,它会产生空指针异常。

于 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 回答