是否有任何方式讓我得到下一個表格行的可用ID(當在表中插入一行時會自動創建),所以我不會被強制插入在給定的時間行,以獲得它?greenDao得到自動遞增編號
更確切地說:我有一個包含listview的活動,並且每個這些項目都是使用第二個活動添加的。當我在第二個活動中添加項目詳細信息時,我將該項目傳遞給一個parcelable對象(我將Parcelable Interface實現爲DaoGenerator創建的其中一個持有者類)。該對象的id值不能爲空,要用writeLong(id)傳遞它,並在我的Parcelable方法中用readLong()接收它,所以我必須自動生成id值,方法是將當前項目已經插入數據庫。 我想要做的是:生成這些ID(不插入數據庫中的項目),將該項目傳遞給第一個活動,當用戶決定保存列表中的所有項目時,我會將它們全部添加到數據庫在一次交易中。
一些示例代碼,我有個大氣壓:
public class Question implements Parcelable {
private Long id;
private String questionContent;
// KEEP FIELDS - put your custom fields here
// KEEP FIELDS END
public Question() {
}
public Question(Long id) {
this.id = id;
}
public Question(Long id,String questionContent) {
this.id = id;
this.questionContent = questionContent;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
// KEEP METHODS - put your custom methods here
// begin Parcelable implementation
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(id);
dest.writeString(questionContent);
}
public static final Parcelable.Creator<Question> CREATOR = new Parcelable.Creator<Question>() {
public Question createFromParcel(Parcel in) {
return new Question(in);
}
public Question[] newArray(int size) {
return new Question[size];
}
};
private Question(Parcel in) {
id = in.readLong();
questionContent = in.readString();
}
// end Parcelable implementation
// KEEP METHODS END
}
,這是我如何創建和發送的項目清單:
Question questionHolder = new Question(
null, etItemContent.getText().toString() .trim(),);
Log.d(LOG_TAG, "question id = "
+ questionHolder.getId());
// inserting it here, would auto-generate the ID I required,
// but I would like to do that to all of the items in the first Activity (containing the list of all of the items)
// questionDao.insert(questionHolder);
Log.d(LOG_TAG, "question id = "
+ questionHolder.getId());
// add item to intent
Bundle b = new Bundle();
b.putParcelable(IMPORTANCE_TAG, questionHolder);
Intent intent = new Intent();
intent.putExtras(b);
setResult(RESULT_OK, intent);
QuestionItemActivity.this.finish();
不錯的一個,我選擇了Parcelable標誌,看起來沒問題。你會介意一些你想說的話:「它會產生太多的緊密耦合」? – DoruAdryan
當然。您的解決方案假定兩個活動將訪問數據庫,並且數據庫狀態不會在兩者之間改變。基本上,3個獨立的組件假定在同步工作(緊密耦合) 對於基本情況,這可能會正常工作,但在將來,您可能有另一種方式向數據庫添加任務(例如從服務器在後臺下載)影響自動遞增計數器。這將打破你的算法時間,並且最終你會很難重新產生令人討厭的錯誤。 通過讓對象自成一體,您可以避免將來出現這種令人討厭的錯誤。 – yigit
非常感謝您的回答和解釋,yigit – DoruAdryan