2012-08-08 100 views
0
public class DatabaseHandler extends SQLiteOpenHelper { 


// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "contextsManager"; 

// Locations table name 
private static final String TABLE_LOCATIONLABLES = "locationLables"; 

// LOCATIONLABLES Table Columns names 
private static final String KEY_LOCID = "loc_id"; 
private static final String KEY_LOCNAME = "loc_name"; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
      + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
      + ")"; 
    db.execSQL(TABLE_LOCATIONLABLES); 
} 

這是說局部變量TABLE_LOCATIONLABLES可能沒有被初始化?它初始化了這個錯誤是怎麼發生的?局部變量可能尚未初始化

+1

嘗試清理您的項目? – 2012-08-08 08:14:15

回答

4

萬阿英,蔣達清在於withing你的代碼本身

// Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
       + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
       + ")"; 
     db.execSQL(TABLE_LOCATIONLABLES); 
    } 

中的OnCreate(DB)已再次宣佈TABLE_LOCATIONLABLES並在同一行中使用它,這就是爲什麼你得到Local variable may not have been initialized

只是重命名字符串TABLE_LOCATIONLABLES裏面你的OnCreate(分貝)這樣

@Override 
    public void onCreate(SQLiteDatabase db) { 
     String mQuery = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
       + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
       + ")"; 
     db.execSQL(mQuery); 
    } 
+1

感謝您沒有注意到:D – user340 2012-08-08 09:43:25

+0

@kani歡迎您。 – Akram 2012-08-08 09:53:01

2

您正在聲明TABLE_LOCATIONLABLES兩次。一旦進入課程級別,一旦進入onCreate例程。只需刪除onCreate例程中的聲明即可。

碎片這。我剛剛看到下面的答案。完全錯過了你的類聲明是一個靜態字段的事實。

3

您正在訪問TABLE_LOCATIONLABLES以創建字符串。局部變量與靜態變量名稱相同,因此本地變量被選中。你應該重命名局部變量來解決這個問題。

0
public void onCreate(SQLiteDatabase db) { 
TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
     + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
     + ")"; 
db.execSQL(TABLE_LOCATIONLABLES);  
} 
1

您有:

String TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
    /*^^^^^^^^^^^^^^^^^^^^*/     /*^^^^^^^^^^^^^^^^^^^^*/ 
     + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
     + ")"; 

注意你提到TABLE_LOCATIONLABLES有兩次!雖然它可能是不好的風格重新使用靜態成員的名字,速戰速決是:

String TABLE_LOCATIONLABLES = "CREATE TABLE " + DatabaseHandler.TABLE_LOCATIONLABLES + "(" 
               /*^^^^^^^^^^^^^^^^*/ 
     + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
     + ")"; 

(PS:它的拼寫LABELS,不LABLES!)

+0

感謝不同的方式:) – user340 2012-08-08 09:45:54

0

OnCreate()方法你想訪問一個變量是一個實例變量,但它實際上只訪問本地方法變量。我建議你作如下更新你的代碼,所以它肯定會工作,

public void onCreate(SQLiteDatabase db) { 
    String TBL_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
      + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
      + ")"; 
    db.execSQL(TBL_LOCATIONLABLES); 
} 
0

你有一個靜態變量稱爲TABLE_LOCATIONLABLES。在您的onCreate方法中,您正在使用一個名稱相同的變量 - 直到現在沒有問題。但在您的聲明String TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," + ")";¸ 您正在訪問局部變量TABLE_LOCATIONLABLES!雖然您正在創新您的本地變量,同時在您的對帳單中進行分配,但此時本地變量未初始化。

我想你想訪問你的靜態變量因此,你必須訪問它像DatabaseHandler.TABLE_LOACATIONLABLES

與此替換舊的語句: String TABLE_LOCATIONLABLES = "CREATE TABLE " + DatabaseHandler.TABLE_LOCATIONLABLES + "(" + DatabaseHandler.KEY_LOCID + " INTEGER PRIMARY KEY," + DatabaseHandler.KEY_LOCNAME + " TEXT," + ")";¸

小提示:訪問您的變量,如果他們通過這個成員或靜態的,所以它更容易看到其中的變量被實例化。

Greets