我正在开发健身追踪器android应用程序,并成功设置了2个表的SQLite数据库。一张表用于保存有关有氧运动的数据,而一张表用于保存有关举重运动的数据。我可以将信息保存到有氧运动表(saved_workout_cardio)中,但是似乎无法将任何东西保存到举重表(saved_workout_weights)中。我首先对保存到“ saved_workout_cardio”表中的功能进行了编码,一旦成功完成工作,我就复制并粘贴了代码并对其进行了编辑,以适应保存到“ saved_workout_weights”表中所需的内容,但是不幸的是,并非如此工作,我对为什么感到困惑。

下面是我的databasehelper java类中的代码,在其中创建数据库以及2种方法,其中1种用于将数据保存到每个表中:

public class DatabaseHelper extends SQLiteOpenHelper {
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";

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_WEIGHTS + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,DATE TEXT,EXERCISE TEXT,WEIGHT INTEGER,REPS INTEGER)");
    db.execSQL("create table " + TABLE_CARDIO + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,DATE TEXT,TIME INTEGER)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_WEIGHTS);
    db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_CARDIO);

    onCreate(db);
}

public boolean saveData (String date, String time) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2a, date);
    contentValues.put(COL_3a, time);
    long result = db.insert(TABLE_CARDIO, null, contentValues);
    if(result == -1)
        return false;
    else
        return true;
}

public boolean saveData2 (String date, String exercise, String weight, String reps, String sets) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues2 = new ContentValues();
    contentValues2.put(COL_2, date);
    contentValues2.put(COL_3, exercise);
    contentValues2.put(COL_4, weight);
    contentValues2.put(COL_5, reps);
    contentValues2.put(COL_6, sets);
    long result = db.insert(TABLE_WEIGHTS, null, contentValues2);
    if(result == -1)
        return false;
    else
        return true;
}


}

现在这是我的'Cardio'Java类中的相关代码,在这里我调用了将数据保存到有氧运动表的方法(此方法有效,并且能够成功将数据保存到有氧运动表:

public void saveCardioData () {
    btnSaveCardio.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isInserted = myDb.saveData(txtDate.getText().toString(),
                            txtTimer.getText().toString() );
                    if(isInserted = true)
                        Toast.makeText(Cardio.this, "Workout saved", Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(Cardio.this, "Error saving workout", Toast.LENGTH_LONG).show();
                }
            }
    );
}


现在是“ weights” java类,在其中调用用于将数据保存到weights表的方法。如您所见,如果已成功插入数据,则我已设置一条举杯消息以显示。每当我单击将锻炼保存到我的应用程序中时,吐司消息都会告诉我锻炼已成功保存,但是当我检查数据库中的体重表时,没有保存任何值。

public void saveWeightsData () {
    btnSaveWeights.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isInserted = myDb.saveData2(exerciseVal.getText().toString(),
                            weightVal.getText().toString(),
                            repVal.getText().toString(),
                            setVal.getText().toString(),
                            dateVal.getText().toString() );
                    if(isInserted = true)
                        Toast.makeText(WeightsMain.this, "Workout saved", Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(WeightsMain.this, "Error saving workout", Toast.LENGTH_LONG).show();
                }
            }
    );
}


真的很困惑为什么我遇到了这个问题,所以如果有人可以告诉我为什么会不胜感激! :)

编辑:我正在使用Android Studio中的Android设备监视器将数据库从android模拟器的存储中拉到我的PC。然后,我使用SQLite Manager firefox插件检查2个表。

最佳答案

表中没有SETS列,但您正在尝试向其中插入数据。那行不通。

SETS列添加到CREATE TABLE之后,可以卸载应用程序以强制onCreate()重新执行。

09-10 06:37
查看更多