2017-12-22 11 views
1

Ich versuche, Daten von einem SQLite DB, in denen ich erfolgreich war, Daten hinzuzufügen. Ich verwende eine databaseHelper Klasse, um Daten und andere Abfragen, die die App möglicherweise hinzufügen require.For Referenz, so sieht die Klasse wie DataBaseHelper aus.
Dies ist, wie meine getData Methode aus dem Helfer wie folgt aussieht:Abrufen von Daten aus einer SQLite-Datenbank und Anzeige in Recyclerview

public Cursor getBasicWorkoutInfo(){ 

    SQLiteDatabase db = this.getWritableDatabase(); 
    String query = "SELECT "+COL2 +", "+COL3+", "+COL4 +" FROM " + TABLE_NAME; 
    Cursor data = db.rawQuery(query, null); 
    return data; 

} 

Die "COL" sind Strings nur Tags Namen der Felder in der DB. Die die recyclerView verwendet ein arrayList eine Klasse Training ich das erstellt wird, wie es wie

public class Workout { 

public String workoutName; 
public String numberOfSets; 
public String restBetweenSets; 

} 

Auf der onCreate Methode der Aktivität sieht ich eine Methode gesetzt habe, dass die Daten aus der DB immer behandelt, aber nach dem Test es aus der App abstürzt und die Debug-Konsole zeigt einen Fehler in der dritten Zeile der While-Schleife.

Cursor data=mDatabaseHelper.getBasicWorkoutInfo(); 

    Workout work=new Workout(); 


    while(data.moveToNext()){ 


     work.workoutName=data.getString(1); 
     work.numberOfSets= String.valueOf(data.getInt(2)); 
     work.restBetweenSets=data.getString(3); 


    } 

    sampleWorkout.add(work); 



    if (sampleWorkout.isEmpty()){ 

     createTextView.setVisibility(View.VISIBLE); 

    }else { 

    workoutRecyclerView=(RecyclerView) findViewById(R.id.myWorkoutsRecyclerView); 
    linearLayoutManager = new LinearLayoutManager(this); 
    DividerItemDecoration itemDecoration = new DividerItemDecoration(this, linearLayoutManager.getOrientation()); 
    workoutRecyclerView.setLayoutManager(linearLayoutManager); 
    workoutRecyclerView.addItemDecoration(itemDecoration); 
    workoutRecyclerView.setHasFixedSize(true); 
    mWorkAdapter = new WorkoutsRecyclerAdapter(sampleWorkout, getBaseContext()); 
    workoutRecyclerView.setAdapter(mWorkAdapter); 


    } 

Was könnte das Problem in der Schleife sein und wie kann ich dieses Problem beheben, so kann ich in der Lage, die Daten effizient zu dem recyclerView

Antwort

0

Versuchen Sie, diese

Da Spaltenindizes hinzuzufügen starten mit 0 in Abfrage

wechseln zu:

work.workoutName=data.getString(0); 
    work.numberOfSets= String.valueOf(data.getInt(1)); 
    work.restBetweenSets=data.getString(2); 
Stattdessen 10

work.workoutName=data.getString(1); 
    work.numberOfSets= String.valueOf(data.getInt(2)); 
    work.restBetweenSets=data.getString(3); 

Dies ist die Lösung Ihrer Tabelle Datentyp

+0

Hallo R2R verwenden datatypes, vielen Dank für die Beantwortung meiner question.Sorry ich diesen Index 0, wenn für die ID-Spalte der Tabelle Punkt vergessen . So erhält es die ID nicht den Workout-Namen –

+0

SELECT "+ COL2 +", "+ COL3 +", "+ COL4 +" FROM "+ TABLE_NAME wenn Sie dies ausführen, wird COL2 = 0, COL3 = 1, COL4 = 2 gestartet ..Ist es hilfreich ... – R2R

+0

Vielen Dank Es funktionierte .. es bevölkerte die Recyclerview nur Problem ist, dass jetzt ist, dass es die Daten überschreibt, die bereits in der Recyclerview angezeigt wird und keine neuen Elemente der Recyclerview –

Verwandte Themen