Как реализовать SQLite Join, используя спиннер в Android Studio для получения идентификатора из таблиц - PullRequest
0 голосов
/ 19 марта 2019

Я создал 2 таблицы в базе данных SQLite, stok и sales

в DatabaseHelper.java

  1. Создать таблицу stok

    String tbStok = "CREATE TABLE stok(id_stok INTEGER PRIMARY KEY AUTOINCREMENT, waktu_stok DATETIME, id_sales INTEGER, stok INTEGER, FOREIGN KEY id_sales REFERENCES sales(id_sales)";
    
  2. Создать таблицу sales

    String tbSales = "CREATE TABLE sales(id_sales INTEGER PRIMARY KEY AUTOINCREMENT, nama VARCHAR, kodesales VARCHAR, username VARCHAR, password VARCHAR, level INTEGER)";
    
  3. Создание данных списка из SQLite

    public List<String> getSpinnerSales(){
        List<String> labels = new ArrayList<String>();
    
        // Select All Query
        String selectQuery = "SELECT  * FROM " + "sales";
    
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
    
        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                labels.add(cursor.getString(0));
                labels.add(cursor.getString(1));
            } while (cursor.moveToNext());
        }
    
        // closing connection
        cursor.close();
        db.close();
    
        // returning lables
        return labels;
    }
    
  4. Дисплей на Spinner

    private void loadSpinnerSales() {
        // database handler
        DatabaseHelper db = new DatabaseHelper(getApplicationContext());
    
        // Spinner Drop down elements
        List<String> lables = db.getSpinnerSales();
    
        // Creating adapter for spinner
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, lables);
    
        // Drop down layout style - list view with radio button
        dataAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
        // attaching data adapter to spinner
        spsales.setAdapter(dataAdapter);
    }
    
  5. Проверка выбора спиннера

        spsales.setOnItemSelectedListener(new 
            AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position,long id) {
                String label = parent.getItemAtPosition(position).toString();
                Log.d("label:", label);
            }
    
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
    
            }
        });
    

Wireframe of spinner, value needed = id_sales

Мне нужно id_sales, чтобы поместить значения и сохранить в других таблицах SQLite, но счетчик должен отображать название продаж.

Ответы [ 3 ]

1 голос
/ 19 марта 2019

лучший способ - использовать пользовательский адаптер, после чего вы можете передать список объектов (в вашем случае это «список идентификаторов и названий продаж») адаптеру, а не просто списку строк, тогда по выбранному элементу вы получитеВыбранный объект, тогда вы можете получить любой нужный вам идентификатор или имя, вы можете перейти по этой ссылке, чтобы сделать пользовательский адаптер https://abhiandroid.com/ui/custom-spinner-examples.html

0 голосов
/ 19 марта 2019

Другое решение проблем

Шаг 1 Создайте класс модели

public class Sales {
    String id_sales,nama;

    public Sales(String id_sales, String nama) {
        this.id_sales = id_sales;
        this.nama = nama;
    }

    public String getId_sales() {
        return id_sales;
    }

    public void setId_sales(String id_sales) {
        this.id_sales = id_sales;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    @Override
    public String toString() {
        return nama;
    }
}

Шаг 2 Поместить все данные из продаж таблицы SQLite

//Data spinner supir
    public ArrayList<Sales> getSpinnerSales(){
        ArrayList<Sales> salesList = new ArrayList<>();

        // Select All Query
        String selectQuery = "SELECT  * FROM " + "sales";

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                salesList.add(new Sales(cursor.getString(0), cursor.getString(1)));
            } while (cursor.moveToNext());
        }

        // closing connection
        cursor.close();
        db.close();

        // returning lables
        return salesList;
    }

Шаг 3 Создание void для использования данных из sqlite aa Activity

private void loadSpinnerSales() {
        // database handler
        DatabaseHelper db = new DatabaseHelper(getApplicationContext());
        ArrayList<Sales> salesList = db.getSpinnerSales();
        ArrayAdapter<Sales> adapter = new ArrayAdapter<Sales>(this, android.R.layout.simple_spinner_dropdown_item, salesList);
        spsales.setAdapter(adapter);

    }

Шаг 4 Загрузка метода при OnCreate

    spsales = (Spinner) findViewById(R.id.spSales);
    loadSpinnerSales();

    spsales.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            Sales sales = (Sales) parent.getSelectedItem();
            Toast.makeText(getApplicationContext(),sales.getId_sales(),Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
0 голосов
/ 19 марта 2019

Я Решить эту проблему с отредактированным кодом

// looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                labels.add(cursor.getString(0)+cursor.getString(1));
            } while (cursor.moveToNext());
        }

А на счетчике на выбранном элементе манипулируют с подстрокой

spsupir.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position,long id) {
                String label = parent.getItemAtPosition(position).toString();
                String ids = String.valueOf(label).substring(0,1);
                Log.d("label:", ids);
            }

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

            }
        });

Код отредактирован

String label = parent.getItemAtPosition(position).toString();
String ids = String.valueOf(label).substring(0,1);
Log.d("label:", ids);
...