[英]Android Null Pointer Exception when Creating Database
我有一個示例應用程序,它創建一個數據庫,表並插入一行值。
這是我的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
。
我的代碼有什么問題嗎?
您正在使用null初始化Context
protected static final android.content.Context Context = null;
因此,當您使用空Context時,它將拋出NPE,您可以使用Activity Context設置Context,然后使用Context
Context = MainActivity.this;
或只是使用這個
SQLiteDatabase sampleDB = this.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);
您正在初始化為protected static final android.content.Context Context = null;
然后將其用作Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);
顯然會產生空指針異常。
皇室
SQLiteDatabase sampleDB = Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);
與
SQLiteDatabase sampleDB = this.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);
原因:
Activity
是Context
子類,因此可以使用this
。 openOrCreateDatabase
不是靜態方法,因此您不能使用類名來調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.