2017-03-31 6 views
0

Ich erstelle eine Fitness-App, in der Trainingsdaten von einem Benutzer eingegeben und in 2 Tabellen in einer SQLite-Datenbank gespeichert werden (TABLE_CARDIO & TABLE_WEIGHTS). Unten ist die Struktur dieser zwei Tabellen:SQLite-Daten können in Android-App nicht angezeigt werden

public static final String DATABASE_NAME = "FitnessTracker.db"; 
public static final String TABLE_WEIGHTS = "saved_workout_weights"; 
public static final String COL_1 = "ID"; 
public static final String COL_2 = "DATE"; 
public static final String COL_3 = "EXERCISE"; 
public static final String COL_4 = "WEIGHT"; 
public static final String COL_5 = "REPS"; 
public static final String COL_6 = "SETS"; 

public static final String TABLE_CARDIO = "saved_workout_cardio"; 
public static final String COL_1a = "ID"; 
public static final String COL_2a = "DATE"; 
public static final String COL_3a = "TIME"; 

I ‚SQLite-Manager‘ firefox add on verwendet haben, in denen konnte ich erfolgreich in beiden Tabellen gespeichert wurde, dass die Daten sehen. Jetzt muss ich die Daten abrufen und in meiner App anzeigen, wenn auf eine Schaltfläche geklickt wird. So habe ich dies unter Verfahren mit einer Abfrage alle gespeicherten Daten aus beiden Tabellen zu erhalten:

public Cursor getWorkoutData() { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    String query = "SELECT * FROM " + TABLE_CARDIO + " CROSS JOIN " + TABLE_WEIGHTS + " ON " + TABLE_CARDIO + ".DATE = " + TABLE_WEIGHTS + ".DATE"; 
    Cursor result = db.rawQuery(query,null); 
    return result; 
} 

ich dann die folgende Methode in einer anderen Java-Klasse, die entweder die Daten aus der Abfrage als String-Werte oder gibt sie zurück gefunden zurück ‚Fehler: kein Training gefunden‘, wenn die Abfrage findet keine Ergebnisse aus meiner Datenbank:

public void viewWorkout() { 
    btnShowWorkout.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Cursor result = myDb.getWorkoutData(); 
        if (result.getCount() == 0) { 
         //show error 
         messageShow("Error","No workouts found"); 
         return; 
        } 

        StringBuffer bfr = new StringBuffer(); 
        while (result.moveToNext()) { 
         bfr.append("Id :"+ result.getString(0)+"\n"); 
         bfr.append("Date :"+ result.getString(1)+"\n"); 
         bfr.append("Time :"+ result.getString(2)+"\n\n"); 
         bfr.append("Id :"+ result.getString(0)+"\n"); 
         bfr.append("Date :"+ result.getString(1)+"\n"); 
         bfr.append("Exercise :"+ result.getString(2)+"\n"); 
         bfr.append("Weight :"+ result.getString(3)+"\n"); 
         bfr.append("Reps :"+ result.getString(4)+"\n"); 
         bfr.append("Sets :"+ result.getString(5)+"\n\n"); 
        } 

        //show data 
        messageShow("Past Workouts",bfr.toString()); 
       } 
      } 
    ); 
} 

Mein Problem ist, dass mein App, die gibt ‚Fehler: kein Training gefunden‘ obwohl ich meine Datenbank-Tabellen überprüft habe und beide sind bevölkert. Gibt es ein Problem mit meiner Abfrage, das es mir nicht erlaubt, alle Daten zu erhalten? Jede Hilfe sehr geschätzt!

+0

Haben Sie versucht, Ihre Anfrage zu ändern? Etwas einfaches wie "SELECT * FROM saved_workout_weights" – parkgrrr

+0

Bitte teilen Sie Daten Beispiel. Das Problem liegt wahrscheinlich daran, dass Sie Ihrer Ergebnismenge nicht beitreten können, nicht aufgrund Ihres Codes. Von besonderem Interesse ist die Art und Weise, wie Sie 'DATE' speichern. – bc004346

Antwort

0

Versuchen Sie es mit .moveToFirst. Wenn es false zurückgibt und Sie sicher sind, dass Sie Daten in der Datenbank haben und die Tabellen erstellt wurden, stimmt etwas nicht mit Ihrer Abfrage.

if (!result.moveToFirst) { 
        //show error 
        messageShow("Error","No workouts found"); 
        return; 
       } 
Verwandte Themen