簡體   English   中英

創建數據庫時Android空指針異常

[英]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);

原因:

  1. ActivityContext子類,因此可以使用this
  2. openOrCreateDatabase不是靜態方法,因此您不能使用類名來調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM