私はこの問題を研究しており、まだいくつかのことに固執しています。まず、私は3つのフィールドデータベースを取り上げてListViewに表示する方法を完全には把握していません(以前はスクロール可能なテキストビューで表示していました)。それは、2つのフィールドデータが追加ボタンとともに追加される2つの編集テキストを持っています。私がしたいのは、ListViewにDBを表示し、その行を削除するためにそのListViewに右側の各行にXが含まれていることです。最初は私はユーザーがテーブルを見て、右の排除と一致し、それを入力し、削除ボタンを押す。SQLiteDB ListView with Delete
マイDataHelper.java
public class DataHelper {
private static final String DATABASE_NAME = "AdultSwim.db";
private static final int DATABASE_VERSION = 3;
private static final String TABLE_NAME = "Requests";
private static final String KEY_ID = "_id";
private static final String field1 = "Show";
private static final String field2 = "Want";
private Context context;
private SQLiteDatabase db;
private SQLiteStatement insertStmt;
private static final String INSERT = "insert into " + TABLE_NAME + "(Show) values (?)" + "(Want) values (?)";
public DataHelper(Context context) {
this.context = context;
OpenHelper openHelper = new OpenHelper(this.context);
this.db = openHelper.getWritableDatabase();
this.insertStmt = this.db.compileStatement(INSERT);
}
public long insert(String name) {
this.insertStmt.bindString(1, name);
return this.insertStmt.executeInsert();
}
public void deleteOne(Long rowId) {
String rownum = rowId.toString();
db.delete(TABLE_NAME, KEY_ID + "=" + rowId, null);
}
public void deleteAll() {
this.db.delete(TABLE_NAME, null, null);
}
public List<String> selectTableData() {
List<String> list = new ArrayList<String>();
Cursor cursor = this.db.query(TABLE_NAME, null, null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(0) + " " + cursor.getString(1));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return list;
}
private static class OpenHelper extends SQLiteOpenHelper {
OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT, Show VARCHAR NOT NULL, Want VARCHAR NOT NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
}
私は、これは完全に正確であるとは思いません。私はプライマリキーと1つのフィールドだけを持っていましたが、私は2番目のフィールドが追加されているとは思わない。
そして今、メインのJava
public class Item2 extends Activity {
private DataHelper dh;
private ImageView addButton;
private ImageView displayNames;
private ImageView delButton;
private EditText show;
private EditText want;
private Editable varTextShow;
private Editable varTextWant;
private TextView outputTable;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item2xml);
dh = new DataHelper(this);
addButton = (ImageView) this.findViewById(R.id.btnAdd);
displayNames = (ImageView) this.findViewById(R.id.btnDisp);
delButton = (ImageView) this.findViewById(R.id.btnDel);
show = (EditText) this.findViewById(R.id.showTitle);
want = (EditText) this.findViewById(R.id.wantDegree);
outputTable = (TextView) this.findViewById(R.id.output);
addButton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
varTextShow = show.getEditableText();
String nameEntered = varTextShow.toString();
dh.insert(nameEntered);
show.setText("");
}
});
displayNames.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
List<String> names = dh.selectTableData();
StringBuilder sb = new StringBuilder();
sb.append("Shows Requested:\n");
for (String name : names) {
sb.append(name);
sb.append("\n");
}
outputTable.setText(sb.toString());
}
});
delButton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v){
varTextShow = show.getEditableText();
String rowToDelete;
rowToDelete = varTextShow.toString();
try{
Long deleteRow = Long.parseLong(rowToDelete.trim());
dh.deleteOne(deleteRow);
show.setText("");
}
catch (NumberFormatException e)
{
Toast toast = Toast.makeText(getBaseContext() ,"You must enter a number.",Toast.LENGTH_LONG);
toast.show();
show.setFocusable(true);
}
}
});
}
}
これは前に頼まれている場合、私はごめんなさい。私は答えを見て、例を見て、私はちょうどそれの周りに私の頭を包むことはできません。それは、ユーザーがデータを入力する同じスクロール可能なウィンドウにデータベースが表示されていることを意味します。
ああ、メインJavaには、2番目のフィールド(field2)が正確に組み込まれていません。
私はAndroidプログラミングの初心者です。
ああ、私はそれについて知っています。私は最後のデータベースでadbシェルを使用しました。少なくとも、すべてのフィールドがデータベースに追加されているかどうかを確認する必要があります。 しかし、メインのJavaを見て、私はまだ 私用EditTextを使用する必要があることがわかります。または、編集可能なprivate varTextWant; 最新のフィールドはどれですか EDIT:私のアプリを走らせました。すべて動作しますが、メニュー項目をクリックしてデータベースに項目を追加すると、強制的に閉じられます。 – Greg
ええ、私は他の問題に取り組んでいませんでした。なぜなら、データが最初に期待されるものであることを確認してから、問題を絞り込んで再度質問する必要があるからです。 –