SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Bagaimana saya bisa memperbarui bidang pemintal saya dengan input pengguna di EditText

Masalah Anda, adalah Anda menggunakan posisi yang dipilih Spinner (0,1,2 dll) sebagai id baris. Id baris pertama akan menjadi 1, lalu 2, dll (mungkin tetapi TIDAK PASTI yaitu menghapus satu baris karena alasan tertentu dan Anda memiliki celah dalam urutannya ).

Dengan demikian apa yang Anda alami saat ini adalah perbedaan 1 antara id baris dan posisi pemintal, jadi tidak ada atau baris lain yang diperbarui.

Anda juga perlu menggunakan beberapa metode untuk mengerjakan id baris ke posisi pemintal (mis. larik kedua yang memiliki id masing-masing untuk indeks yang sama dari larik pertama), atau untuk, yang akan saya lakukan adalah, manfaatkan fleksibilitas CursorAdpater , seperti SimpleCursorAdapter lalu gunakan spinner.getSelectedItemId() bukannya spinner.getSelectedItemPosition() .

Untuk menggunakan A CursorAdapter, Anda memerlukan baris bernama _id (mis., ubah private static final String KEY_ID = "id"; ke public static final String KEY_ID = "_id"; )

Catatan! Saya juga menyarankan untuk mengubah, seperti yang saya lakukan di atas, private statics . Anda ke public statics ).

Juga untuk menggunakan CursorAdapter, Anda memerlukan Cursor. Metode berikut di SpinnerDatabase.java sudah cukup.

public Cursor getAll() {
    db = this.getWritableDatabase();
    return db.query(TABLE_LABELS,null,null,null,null,null,null);
}

Berikut ini dapat digunakan untuk mengatur adpater:-

    csr = dbhlpr.getAll();

    sca = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_1,
            csr,
            new String[]{SpinnerDatabase.KEY_NAME},
            new int[]{android.R.id.text1},0);

    spinner.setAdapter(sca);

Catatan! penggunaan SpinnerDatabase.KEY_NAME , ini adalah contoh mengapa saya menyarankan 'public static' sebagai lawan dari private static .

Ada perbedaan halus untuk SimpleCursorAdpater;

  • 3 parameter adalah Kursor,
  • 4 adalah larik String dari nama kolom di kursor yang akan ditampilkan (harus cocok dengan parameter ke-5),
  • ke-5 adalah id tampilan tempat data ditempatkan (untuk simple_list_item_1 gunakan 1 nama kolom bersama dengan android.R.id.text1 seperti di atas) .

dan untuk pembaruan gunakan spinner.getSelectedItemId() untuk id baris.

Contoh Kerja (dengan asumsi baris memiliki data)

SpinnerDatabase.java

public class SpinnerDatabase extends SQLiteOpenHelper {
    private SQLiteDatabase db;

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "spinnerDB";
    private static final String TABLE_LABELS = "labels";
    private static final String KEY_ID = "_id";
    public static final String KEY_NAME = "name";

    public SpinnerDatabase(Context context) {
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CATEGORIES_TABLES = "CREATE TABLE " +
                TABLE_LABELS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"+
                KEY_NAME + " TEXT)";
        db.execSQL(CREATE_CATEGORIES_TABLES);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS);
        onCreate(db);
    }

    public void insertLabel(String label){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME,label);

        db.insert(TABLE_LABELS,null,values);
    }


    //Defunct
    public List<String> getAllLabels(){
        List<String> labels = new ArrayList<String>();
        String selectQuery = "SELECT * FROM "+ TABLE_LABELS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery,null);
        if (cursor.moveToFirst()){
            do{
                labels.add(cursor.getString(1));
            }while (cursor.moveToNext());
        }

        cursor.close();
        return labels;
    }


    public void updateSpinner (long id, String label){
        ContentValues values;
        String where;

        db = this.getWritableDatabase();

        where = KEY_ID + " = " +id;

        values = new ContentValues();
        values.put(KEY_NAME,label);

        db.update(TABLE_LABELS,values,where,null);
        db.close();
    }

    public Cursor getAll() {
        db = this.getWritableDatabase();
        return db.query(TABLE_LABELS,null,null,null,null,null,null);
    }
}

Aktivitas SO46330096Activity.java

public class SO46330096Activity extends AppCompatActivity {

    SpinnerDatabase dbhlpr;
    Spinner spinner;
    Button editbutton;
    EditText spinneritem;
    SimpleCursorAdapter sca;
    Cursor csr;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_so46330096);
        spinner = (Spinner) findViewById(R.id.spinner);
        editbutton = (Button) findViewById(R.id.editbutton);
        spinneritem = (EditText) findViewById(R.id.spinnerinput);
        dbhlpr = new SpinnerDatabase(this);
        csr = dbhlpr.getAll();

        sca = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1,
                csr,
                new String[]{SpinnerDatabase.KEY_NAME},
                new int[]{android.R.id.text1},0);
        spinner.setAdapter(sca);

        editbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (spinneritem.getText().toString().length() > 0) {
                    dbhlpr.updateSpinner(spinner.getSelectedItemId(),spinneritem.getText().toString());
                    sca.swapCursor(csr = dbhlpr.getAll());
                }
            }
        });

    }
}

Tata Letak activity_so46330096.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SO463300096 Activity"/>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="SPINNER ENTRY"
            />
        <EditText
            android:id="@+id/spinnerinput"
            android:layout_width="0dp"
            android:layout_weight="3"
            android:layout_height="match_parent" />
        <Button
            android:id="@+id/editbutton"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="EDIT"/>
    </LinearLayout>
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </Spinner>
</LinearLayout>

Contoh penggunaan:-

Spinner dipilih (data pembaruan catatan telah dimasukkan ):-

Selai kacang dipilih dan data yang diperbarui dimasukkan :-

Setelah Mengklik tombol Edit :-

Menyetel EditText ke Item Spinner yang dipilih saat ini

Berikut ini dapat digunakan untuk menyetel EditText ke nilai item pemintal yang saat ini dipilih:-

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            spinneritem.setText(csr.getString(csr.getColumnIndex(SpinnerDatabase.KEY_NAME)));
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

Dapat ditambahkan setelah mengatur Adaptor di Aktivitas.

DalamSO46330096Activity.java di atas itu bisa mengikuti garis :-

        spinner.setAdapter(sca);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite pilih baris jika stempel waktu cocok dengan tanggal hari ini

  2. Cara Menginstal SQLite dan SQLite Browser di Ubuntu

  3. Cara menggunakan kelas databasehelper di kelas asynctask yang bekerja di kelas yang berbeda

  4. 2 Cara untuk Mengembalikan Nilai Numerik dari Kolom Database SQLite

  5. SQL:Urutkan berdasarkan prioritas, tetapi letakkan 0 terakhir