2012-12-19 38 views
1

我已經使用LogCat來確定問題行。Android - 爲什麼我在SQLiteOpenHelper onCreate中收到NullPointerException?

SQL字符串我想在的onCreate執行是..

CREATE TABLE Routines(_id integer primary key autoincrement, json TEXT); 

當試圖執行此操作,出現問題。

這可能是什麼導致NullPointerException。如果你看不出有什麼問題,請閱讀更多背景知識。

這個數據庫還沒有創建,我不斷得到一個NullpointerException,我已經把它和以前的SQLite代碼進行了比較,這個問題被證明是迴避的。

但是,我提到這一點,因爲它仍然需要通過onCreate方法。我在我的主代碼中創建了一個新的DatabaseOpenHelper(擴展SQliteOpenHelper),並調用助手的open()方法,如下所示。

public void open() throws SQLException 
{ 
    ssDatabase = databaseOpenHelper.getWritableDatabase(); 
} 

如果我沒有弄錯,因爲我的數據庫還沒有創建(我通過先卸載它來確保這一點)。當open()方法被調用時,onCreate SQLiteHelper被調用。

這是我稱之爲開放方法的代碼。

try 
    {     
     dbConnector = new DatabaseConnector (this); 
     debug = "2 "; 

     // This on first start will invoke the database onCreate method - throws SQLException 
     dbConnector.open(); /* PROBLEM LINE */ 
     debug = "3 "; 
    } 
    catch (Exception e) 
    { 
     textView1.setText(debug + e.toString()); 
    } 

這是包含我DatabaseOpenHelper和onCreate方法

private class DatabaseOpenHelper extends SQLiteOpenHelper 
{ 
    public DatabaseOpenHelper(Context context, String name, CursorFactory factory, int version) 
    { 
     super(context, name, factory, version); 

     Log.i(TAG, "Constructor"); 
    } 

    // On initial creation of database 
    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     Log.i(TAG, "Before SQL command"); 

     String sqlCreateCommand = "CREATE TABLE Routines" 
       + "(_id integer primary key autoincrement, " 
       + "json TEXT);"; 

     Log.i(TAG, sqlCreateCommand); 

     // I believe this to be the PROBLEM LINE 
     ssDatabase.execSQL(sqlCreateCommand); 

     Log.i(TAG, "Jab done"); 
    } 

    // On upgrade - currently do nothing 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {}  
} 

感謝您的幫助的代碼!

+0

完整的堆棧跟蹤將很有用:) – span

+0

您是否嘗試調試您的代碼以找到它? –

+0

嗯,如果你的意思是在'問題'選項卡中的錯誤,那麼根本就沒有這條路徑。唯一的例外,就像我所指的那樣,我在TextView上顯示..也許有點小事要做:P在我的LogCat中,除了我自己的標記之外,還有一個例外。 – mgibson

回答

4

好像我沒有特權發表評論。一個問題:ssDatabase.execSQL(sqlCreateCommand); - >不應該是db.execSQL(sqlCreateCommand); 因爲參數是SQLiteDatabase數據庫。其次你使用_id。這個索引是不是默認創建的?沒關係,如果這與它無關。這只是我的思想。 :)

+0

啊,我真是個傻瓜!哈哈,我想那是幾個小時的編碼對你來說,對我來說!謝謝!據我所知,它不是默認的,「_id」是推薦的,並允許ContentProviders的特殊功能,但它仍然需要設置。這是我從迄今爲止的一系列教程中收集到的。 – mgibson

相關問題