2013-03-05 57 views
0

我有一個示例應用程序,它創建數據庫,表並插入一行值。創建數據庫時Android空指針異常

這裏是我的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

我的代碼有問題嗎?

回答

3

要初始化您的語境與空

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

所以,當您使用的是空的上下文,它會拋出一個NPE,你可以用你的活動情境設置你的環境,然後用你的上下文

Context = MainActivity.this; 

或使用此

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

終於知道我的錯誤了。謝謝!!!!! – Mahe 2013-03-05 11:12:21

+0

歡迎您;) – 2013-03-05 11:13:44

1

要初始化爲protected static final android.content.Context Context = null; 然後使用它作爲Context.openOrCreateDatabase("WaterElectricityReading", MODE_WORLD_READABLE, null);

它會產生明顯的空指針異常。

+0

謝謝!有效。 – Mahe 2013-03-05 11:12:42

1

Repalce

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

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

原因:

  1. ActivityContext子類,所以你可以使用this
  2. openOrCreateDatabase不是一個靜態方法,所以你不能使用類名來調用它。
+0

感謝您的闡述! – Mahe 2013-03-05 11:14:39