如何将对象作为参数传递以将数据存储到数据库?

时间:2015-02-06 13:58:55

标签: android sqlite fragment

我对Android比较陌生,而且我在通过数据库的过程中遇到了一些困难,所以我们非常感谢任何准则!这就是〜

    //Random Fragment that inserts data to the databaase
    mWorkoutData = new WorkoutData();
    mDBTools = new DBTools(getActivity());

    HashMap<String, String> queryValuesMap =  new HashMap<String, String>();

    queryValuesMap.put("comments", mWorkoutData.getComments());

    mDBTools.insertWorkoutData(queryValuesMap);

WorkoutData是模型类,但它不会设法将任何数据插入数据库,如果我传递一个Edittext作为参数,一切都很好!

非常感谢有关如何解决此问题的任何指导或见解!

修改

DBTool中

    public void insertWorkoutData(HashMap<String, String> queryValues) {

    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();



    values.put("comments", queryValues.get("comments"));


    db.insert("workouts", null, values);

    db.close();
}

这是DBTools插入这个特定数据的相应方法,我相信DBTools类工作正常,因为我能够在listview上查看数据,以防我传递类似

的内容
 queryValuesMap.put("comments", EditText.getText().toString());

而不是

queryValuesMap.put("comments", mWorkoutData.getComments());

如上所述。

EDIT2

   //Random Fragment number 2 prior to random Fragment of the code above
   mWorkoutData.setComments(mTrainingEditText.getText().toString());

2 个答案:

答案 0 :(得分:0)

您构建了一个workoutData对象,然后在其上调用了getComments,但我认为此时注释为空。在尝试将注释读回之前,您需要为注释设置值。

答案 1 :(得分:0)

对你的问题不是一个真正的答案,但我想向你提出的建议比我在评论中所做的更长。

每当您使用数据库时,都应该使用契约类来存储常量。这将使您的代码更容易编写,并且更不容易出现拼写错误。这甚至可能是你的问题。但基本上你只是做一个类似

的课程
public class WorkoutDatabaseContract {
    public static final String DB_NAME = "fitness"

    public static final String TABLE_WORKOUTS = "workouts"
    ...
    public static final String FIELD_COMMENTS = "comments"
    ...
}

然后您对数据库的调用看起来像

values.put(WorkoutDatabaseContract.FIELD_COMMENTS, queryValues.get(WorkoutDatabaseContract.FIELD_COMMENTS));
-or-
queryValuesMap.put(WorkoutDatabaseContract.FIELD_COMMENTS, workoutData.getComments);

它不那么紧凑,但你输入的次数较少,因为它会自动为你完成,而你不必依靠你的打字能力就能在任何地方找到合适的字段。此外,如果你有任何改变,你只需要在一个地方改变它。