2015-02-06 18 views
0

我對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(); 
} 

這是在DBTool各自的方法插入這個具體的數據,我相信DBTool中類是正常的,因爲我能看到的數據在我的情況下,列表視圖我通過類似

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()); 
+0

'DBTools'是......你的'SQLiteOpenHelper'?如果沒有'DBTools'的代碼,我可以幫到你。 – seiterm 2015-02-06 14:06:09

+0

感謝您的快速回答,我編輯了我的問題! (是的,DBTools是我的SQLiteOpenHelper類) – thanosChatz 2015-02-06 14:14:30

+1

下面答案的要點是「mWorkoutData.getComments()'返回什麼?」。在該行上設置一個斷點,然後點擊「Alt + F8」來評估該表達式,並確保它是您的想法。原則上沒有理由應該區分一個「String」與另一個。 – seiterm 2015-02-06 14:50:28

回答

0

您構建一個workoutData對象,然後就可以稱爲getComments,但我想在這一點上,註釋爲空假設。在嘗試將其讀出之前,您需要爲註釋設置值。

+0

嗯,謝謝你的回答,我確實設定了一個值。 (mTrainingEditText.getText()的toString())mWorkoutData.setComments;這應該是在一個特定的地方,也許在onCreateView之外?此外,這發生在getComments調用之前!提前致謝! – thanosChatz 2015-02-06 14:21:53

+0

該行代碼不在您粘貼的代碼示例中 – 2015-02-06 14:23:42

+0

謝謝!我道歉編輯我的問題,此代碼示例存在於getComments調用之前的另一個片段中。我懷疑這是一個新手的錯誤。我很感謝任何見解〜 – thanosChatz 2015-02-06 14:27:44

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); 

這是不夠緊湊,但你少打字,因爲想法會自動完成你,和你不必依靠你的打字能力來在任何地方都能找到這個領域。另外如果你改變任何東西,你只需要在一個地方改變它。

+0

謝謝seiterm的建議,我意識到這一點,我完全同意!我想我會開始與這個計劃一起努力,一旦我得到時間〜謝謝,祝你有美好的一天! – thanosChatz 2015-02-06 14:52:48

相關問題