Für meine App versuche ich Highscores in einer Datenbank zu speichern, die auf meinem Android-Gerät namens "highscores.db" gespeichert ist. Jetzt habe ich ein Problem, dass die MySQL keine Zeilen an al zurückgibt, so würde ich vermuten, dass entweder meine Einfügung falsch geht oder mein Abrufvorgang läuft. Ich habe überhaupt keine Ahnung, was falsch ist (zum ersten Mal sqlite user).SQLite db gibt keine Zeilen zurück
DBHandler.java
public class DBHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 3;
private static final String DATABASE_NAME = "highscores.db";
public static final String TABLE_HIGHSCORES = "highscores";
public static final String COLUMN_WAVE = "wave";
public static final String COLUMN_MONEY = "money";
public static final String COUKN_ZOMBIEKILL = "zombiekill";
public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_HIGHSCORES + "(" + COLUMN_WAVE + " INTEGER, " +
COLUMN_MONEY + " DOUBLE, " +
COUKN_ZOMBIEKILL + " INTEGER " + ")";
db.execSQL(query);
}
//Upgrade db
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_HIGHSCORES);
onCreate(db);
}
//add new row
public boolean addHighScore(Highscore highscore) {
ContentValues values = new ContentValues();
values.put(COLUMN_WAVE, highscore.getWave());
values.put(COLUMN_MONEY, highscore.getMoneyLeftOver());
values.put(COUKN_ZOMBIEKILL, highscore.getZombiekill());
SQLiteDatabase db = this.getWritableDatabase();
long result = db.insert(TABLE_HIGHSCORES, null, values);
if(result == -1){
return false;
}else{
return true;
}
}
//Get database info
public ArrayList<Highscore> getHighScores(){
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM highscores";
int wave = 0;
double money = 0;
int zombiekill = 0;
Highscore hs = null;
ArrayList<Highscore> highscores = new ArrayList<>();
Cursor c = db.rawQuery(query,null);
c.moveToFirst();
while(c.moveToNext()){
if(c.getString(c.getColumnIndex("wave")) != null){
wave = Integer.parseInt(c.getString(c.getColumnIndex("wave")));
}
if(c.getString(c.getColumnIndex("money")) != null){
money = Integer.parseInt(c.getString(c.getColumnIndex("money")));
}
if(c.getString(c.getColumnIndex("zombiekill")) != null){
zombiekill = Integer.parseInt(c.getString(c.getColumnIndex("zombiekill")));
}
hs = new Highscore(wave,money,zombiekill);
highscores.add(hs);
}
db.close();
return highscores;
}
}
Auch ich weiß nicht, wo diese Datenbank zu sehen, ob zu überprüfen oder nicht gefüllt wird. Viele geben eine Erklärung, wo es gefunden werden kann, aber ich weiß nicht, wie ich dorthin komme.
~ Vielen Dank im Voraus
EDIT1.0 public Arraylist getHighScores geändert()
public ArrayList<Highscore> getHighScores(){
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM highscores";
int wave = 0;
double money = 0;
int zombiekill = 0;
Highscore hs = null;
ArrayList<Highscore> highscores = new ArrayList<>();
Cursor c = db.rawQuery(query,null);
c.moveToFirst();
while(!c.isAfterLast()){
if(c.getString(c.getColumnIndex("wave")) != null){
wave = Integer.parseInt(c.getString(c.getColumnIndex("wave")));
}
if(c.getString(c.getColumnIndex("money")) != null){
money = Integer.parseInt(c.getString(c.getColumnIndex("money")));
}
if(c.getString(c.getColumnIndex("zombiekill")) != null){
zombiekill = Integer.parseInt(c.getString(c.getColumnIndex("zombiekill")));
}
hs = new Highscore(wave,money,zombiekill);
highscores.add(hs);
c.moveToNext();
}
db.close();
return highscores;
}
Immer noch nicht
EDIT2.0 arbeiten: Dies ist im wie Handhabung
DBHandler handler = new DBHandler(getApplicationContext(),null,null,1);
for (int i = 0; i < 5; i++) {
handler.addHighScore(new Highscore(10,30,55));
}
Spar
das ist, wie im Abrufen auf andere Datei:
DBHandler handler = new DBHandler(getActivity().getApplicationContext(), null, null, 1);
HighScoreSingleton.getInstance().setHighscores(handler.getHighScores());
Wie viele Zeilen du hinzugefügt hast .. Wenn du nur eine Zeile hinzugefügt hast .. Wie du den Aufruf von movetext nimmst, erhältst du keine Daten. – Sush
Ihr Code funktioniert richtig, ich habe Ihre Methoden kopiert und kann die Werte abrufen. Ihr Problem ist, wie Sie diese Methoden verwenden. Überprüfen Sie, ob Sie die Highscore-Daten außerhalb dieser Klasse korrekt verarbeiten. –
verwaltet, um es zu beheben – Ellisan