【问题标题】:Local variable may not have been initialized局部变量可能尚未初始化
【发布时间】:2012-08-08 08:11:39
【问题描述】:
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 可能没有被初始化?它被初始化了这个错误是怎么发生的?

【问题讨论】:

    标签: java android sqlite compiler-errors local-variables


    【解决方案1】:

    问题在于你的代码本身

     // 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 的原因

    只需像这样在 oncreate(db) 中重命名 String TABLE_LOCATIONLABLES

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

    【讨论】:

      【解决方案2】:

      您正在访问TABLE_LOCATIONLABLES 以创建字符串。局部变量与静态变量具有相同的名称,因此选择了局部变量。你应该重命名局部变量来解决这个问题。

      【讨论】:

        【解决方案3】:

        您声明了两次 TABLE_LOCATIONLABLES。一次在类级别,一次在 onCreate 例程中。只需删除 onCreate 例程中的声明即可。

        报废这个。我刚刚看到下面的答案。完全忽略了您的类声明是静态字段这一事实。

        【讨论】:

          【解决方案4】:

          你有:

          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!)

          【讨论】:

            【解决方案5】:
            public void onCreate(SQLiteDatabase db) { 
            TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
                    + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
                    +  ")"; 
            db.execSQL(TABLE_LOCATIONLABLES);    
            } 
            

            【讨论】:

              【解决方案6】:

              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);   
              }
              

              【讨论】:

                【解决方案7】:

                您有一个名为 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," + ")";¸

                一个小提示:如果您的变量是成员或静态变量,请通过 this 访问它们,因此更容易查看变量的实例化位置。

                问候

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-03-25
                  相关资源
                  最近更新 更多