私は、さまざまなフラグメントやアクティビティを通して多くのユーザー入力を必要とするアプリケーションを持っています。今、私は1つのクラスのすべての変数を「レポート」と呼び、プライマリキーを回して、「レポート」が何であるかを正確に知ることができます(リストビューがあります。変更を加える) 最終的にすべてのユーザー入力がデータベースに書き込まれなければならないので、私は考えていました。つまり、レポートからすべての変数を削除し、静的な最終列名に置き換えて、 gettersとsetterを使用してデータベースとの間で読み書きを行います。これは良いデザインですか、欠けている欠点がありますか? 比較的経験の浅いAndroid開発者として、私は得ることのできるアドバイスを求めています。SQLite DBで直接ゲッターとセッターを使用する
例(申し訳ありませんが、私は携帯電話からこれを書いています間違いがある場合):
public MyTextWatcher extends TextWatcher {
private View view;
private Report report;
public MyTextWatcher(View view, Report report) {
this.view = view;
this.report = report;
}
public void afterTextChanged(Editable editable) {
String input = editable.toString();
switch(view.getId()) {
case R.id.columnA:
if (!report.setColumnA(input)) {
// something went wrong
}
... etc.
}
}
と活動/フラグメントI中:
public class Report {
private int primaryKey;
private SQLiteDBHelper db;
private static final String ColumnA = "columnA";
private static final String ColumnB = "columnB";
private static final String ColumnC = "columnC";
// lets say columns A and B are Strings and C is an int
public Report(int primaryKey, Context ctx) {
this.primaryKey = primaryKey;
this.db = new SQLiteDBHelper(ctx);
}
public String getColumnA() {
return db.getString(primaryKey, ColumnA)
}
public boolean setColumnA(String value) {
return db.setString(primaryKey, ColumnA, value);
}
public String getColumnB() {
return db.getString(primaryKey, ColumnB)
}
public boolean setColumnB(String value) {
return db.setString(primaryKey, ColumnB, value);
}
public String getColumnC() {
return String.valueOf(db.getInt(primaryKey, ColumnC));
}
public boolean setColumnC(String value) {
return db.setInt(primaryKey, ColumnC, Helper.tryParseInt(value));
}
}
は、私は、このようTextWatcher拡張することができこれを行うとよいでしょう
私はSharedPreferencesに現在の主キー(リストビューから選択された一人のユーザ)を保存し、その後、多くのメモリを使用せずに、私はそれを使用する必要があるすべての活動/フラグメントでそれから新しいレポートを作成することができます
私は確認することができますどのようなユーザーが入力したものをDBにある間に任意のdiscrepency決してありません - 私はすべての活動/フラグメントのためOnTextChangedリスナー
に列ごとに、対応するセッターを呼び出すことができ、たとえばEditTextsには、実際に画面に表示されるフィールドのみがデータベースから取得されますinCreate
少ないコードですか? (例えば。私は唯一のget /にsetIntを必要と私のDBヘルパーで/ setStringのメソッドを取得するために、私は一つだけTextWatcherクラスを必要とする、活動/フラグメント間の周りに何かを渡す必要がいけない)
私はこのアプローチを考える理由
DBへの常時読み書きとバッテリの使用と速度に問題がある可能性がありますか?
???
個々の列を設定する必要はありません。行全体で値全体を挿入することができます –
はい、データの損失を避けるために、ユーザー入力を即座に保存します。 – HomeIsWhereThePcIs
それは私の問題ではありません...個別にではなく複数の列に一度に 'ContentValues'を挿入することができます –