2017-02-25 58 views
-4

我有一個遊戲,我想在前10名的結果和結果將由2件事情 - 困難(簡單,中等,困難)和得分(整數)。到目前爲止,我嘗試了一段時間,現在明白這一點的SQLite如何在Android的工作室,我仍然感到困惑,但這裏讀幾個教程後是我想方設法組成:下面這個類DBHandler類如何保存高分和時間在我的遊戲SQLite

public class DBHandler extends SQLiteOpenHelper { 

private static final int DATABASE_VERSION = 1; 

private static final String DATABASE_NAME = "highscores"; 

private static final String TABLE_DETAIL = "scores"; 

private static final String KEY_ID = "id"; 
private static final String KEY_TIME = "time"; 
private static final String KEY_DIFFICULTY = "difficutly"; 


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

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_HIGHSCORES_TABLE = "CREATE TABLE" + TABLE_DETAIL + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY, " 
      + KEY_TIME + " TEXT, " 
      + KEY_DIFFICULTY + " TEXT, "; 
    db.execSQL(CREATE_HIGHSCORES_TABLE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_DETAIL);  // tova maha starata tablica ako s16testvuva 

    onCreate(db);           // tova q pravi nanovo 
} 
// Adding new score 
public void addScore(int score) { 

    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    values.put(KEY_TIME, score); // score value 

    // Inserting Values 
    db.insert(TABLE_DETAIL, null, values); 

    db.close(); 

} 

// Getting All Scores 
public String[] getAllScores() { 

    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_DETAIL; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 

    int i = 0; 

    String[] data = new String[cursor.getCount()]; 

    while (cursor.moveToNext()) { 

     data[i] = cursor.getString(1); 

     i = i++; 

    } 
    cursor.close(); 
    db.close(); 
    // return score array 
    return data; 
} 
} 

,我不知道爲什麼它甚至是必需的,但我看到它在每一個教程,所以我將它複製...

public class Contact { 

//private variables 
int _id; 
String difficulty; 
String time; 

// Empty constructor 
public Contact(){ 

} 
// constructor 
public Contact(int id, String name, String _phone_number){ 
    this._id = id; 
    this.difficulty = name; 
    this.time = _phone_number; 
} 

// constructor 
public Contact(String name, String _phone_number){ 
    this.difficulty = name; 
    this.time = _phone_number; 
} 
// getting ID 
public int getID(){ 
    return this._id; 
} 

// setting id 
public void setID(int id){ 
    this._id = id; 
} 

// getting name 
public String getName(){ 
    return this.difficulty; 
} 

// setting name 
public void setName(String name){ 
    this.difficulty = name; 
} 

和最後一堂課

public class highscores extends Activity { 

private ListView scorebox; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    DBHandler db = new DBHandler(this); 
    scorebox = (ListView) findViewById(R.id.scorebox); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.highscores); 
    Log.d("Insert: ", "Inserting .."); 
    db.addScore(9000); 
    Log.d("Reading: ", "Reading all contacts.."); 
} 
} 

我在最後一節課試圖把有些數據只是爲了測試數據庫,但是一旦我點擊按鈕打開數據庫,應用程序就會崩潰,這就是我放棄的地方,並決定尋求幫助。 錯誤是一個很長的錯誤:

FATAL EXCEPTION: main 
       Process: com.example.user.myapplication, PID: 24731 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.myapplication/com.example.user.myapplication.highscores}: android.database.sqlite.SQLiteException: near "TABLEscores": syntax error (code 1): , while compiling: CREATE TABLEscores(id INTEGER PRIMARY KEY, time TEXT, difficutly TEXT, 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
       Caused by: android.database.sqlite.SQLiteException: near "TABLEscores": syntax error (code 1): , while compiling: CREATE TABLEscores(id INTEGER PRIMARY KEY, time TEXT, difficutly TEXT, 
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
        at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677) 
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608) 
        at com.example.user.myapplication.DBHandler.onCreate(DBHandler.java:34) 
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251) 
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) 
        at com.example.user.myapplication.DBHandler.addScore(DBHandler.java:46) 
        at com.example.user.myapplication.highscores.onCreate(highscores.java:25) 
        at android.app.Activity.performCreate(Activity.java:6679) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  
        at android.app.ActivityThread.-wrap12(ActivityThread.java)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:154)  
        at android.app.ActivityThread.main(ActivityThread.java:6119)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
+0

請細化您的代碼片段,我們很難解析您項目中的所有代碼,如果您可以嘗試查明問題並僅提供代碼,那麼可能會更容易排除故障 – Bawpotter

回答

1

SQL中有語法錯誤。

android.database.sqlite.SQLiteException:鄰近 「TABLEscores」:語法錯誤(碼1):在編譯:CREATE TABLEscores(ID INTEGER PRIMARY KEY,時間TEXT,difficutly TEXT,

它應該是TABLE之後的空格

+0

好的,謝謝我修復了這個錯誤,但不是它只是加載一個空白頁面ead of db.addScore(9000);' – Tim

+0

如果您的問題得到解答 - 請將答案標記爲正確答案。如果您有其他問題 - 請隨時創建另一個問題。 – Divers