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が初期化されていない可能性があるということですか?このエラーはどのように発生していますか?

4

7 に答える 7

4

問題はコード自体にあります

 // 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);   
    }
于 2012-08-08T08:17:37.473 に答える
3

TABLE_LOCATIONLABLES文字列を作成するためにアクセスしています。ローカル変数は静的変数と同じ名前であるため、ローカル変数が選択されます。この問題を解決するには、ローカル変数の名前を変更する必要があります。

于 2012-08-08T08:14:51.047 に答える
2

TABLE_LOCATIONLABLESを2回宣言しています。クラスレベルで1回、onCreateルーチン内で1回。onCreateルーチン内の宣言を削除するだけです。

これをスクラップします。私はちょうど以下の答えを見ました。クラス宣言が静的フィールドであるという事実を完全に見逃しました。

于 2012-08-08T08:13:37.783 に答える
1

あなたが持っている:

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

そこで2回言及していることに注意してくださいTABLE_LOCATIONLABLES!静的メンバー名を再利用するのは悪いスタイルかもしれませんが、簡単な修正は次のとおりです。

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

(追伸:LABELSではなく、綴られていLABLESます!)

于 2012-08-08T08:19:34.543 に答える
0
public void onCreate(SQLiteDatabase db) { 
TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" 
        + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," 
        +  ")"; 
db.execSQL(TABLE_LOCATIONLABLES);    
} 
于 2012-08-08T08:19:17.753 に答える
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);   
}
于 2012-08-08T08:20:07.690 に答える
0

TABLE_LOCATIONLABLESという静的変数が 1 つあります。onCreateメソッドで、同じ名前の変数を初期化しています - 今まで問題ありませんでした。しかし、ステートメントでは、ローカル変数 TABLE_LOCATIONLABLES にアクセスしています! ステートメント内でローカル変数を割り当てながら初期化していますが、現時点ではローカル変数は初期化されていません。String TABLE_LOCATIONLABLES = "CREATE TABLE " + TABLE_LOCATIONLABLES + "(" + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT," + ")";¸

静的変数にアクセスしようとしたと思うので、 DatabaseHandler.TABLE_LOACATIONLABLESのようにアクセスする必要があります。

古いステートメントを次のように置き換えます。 String TABLE_LOCATIONLABLES = "CREATE TABLE " + DatabaseHandler.TABLE_LOCATIONLABLES + "(" + DatabaseHandler.KEY_LOCID + " INTEGER PRIMARY KEY," + DatabaseHandler.KEY_LOCNAME + " TEXT," + ")";¸

ちょっとしたヒント: 変数がメンバーまたは静的である場合は、これを介して変数にアクセスすると、変数がインスタンス化されている場所を簡単に確認できます。

あいさつ

于 2012-08-08T08:27:36.903 に答える