SQLiteDB ListView с удалением - PullRequest
       0

SQLiteDB ListView с удалением

0 голосов
/ 22 июля 2011

Я исследовал эту проблему и все еще застрял на нескольких вещах.Во-первых, мне еще предстоит полностью понять, как взять базу данных из 3 полей и показать ее в ListView (ранее я только что показал ее в виде прокручиваемого текста).В моем нынешнем виде у меня есть 2 редактируемых текста, которые представляют собой данные двух полей, которые добавляются вместе с кнопкой добавления.Что я хочу сделать, так это показать БД в ListView и сделать так, чтобы ListView содержал X в каждой строке справа, чтобы удалить эту строку.Сначала пользователи просматривают таблицу, сопоставляют правильное число, вводят его и нажимают кнопку удаления.

Мой 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);
        }
    }
}

Я не думаю, что это абсолютно точно.У меня был один только с первичным ключом и одним полем, я не думаю, что мое второе поле добавляется.

А теперь основной 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 еще нет встроенного второго поля (field2).

Я новичок в программировании на Android.

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

написать запрос на удаление в классе адаптера представления списка в deleteIco.setOnClickListener ()

0 голосов
/ 22 июля 2011

Это не обязательно ответ на все ваши проблемы, но это может помочь вам устранить неполадки.

Вы можете посмотреть в своей базе данных, чтобы узнать, что было добавлено, запустив adb в терминале, когда AVDсвязано.

  1. Откройте терминал и введите adb shell
  2. cd в папку с базой данных (обычно data / data / com.yourpackage / database /)
  3. Тип sqlite3 <database_file_name>
  4. Если вы все сделали правильно до сих пор, то набрав .tables, вы увидите все свои таблицы.
  5. Введите select * from <table_name>;, чтобы увидеть все ваши данные.

Это очень важно для разработки БД, чтобы вы могли увидеть вашу базу данных и то, как данные вводятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...