如何在Android Studio中使用spinner实现SQLite Join从表中获取id

问题描述 投票:0回答:3

我在SQLite数据库中创建了2个表,stoksales

在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,但是微调器必须显示销售名称。

java android sqlite spinner
3个回答
1
投票

最好的方法是使用自定义适配器然后你可以将对象列表(在你的情况下是“销售ID和名称列表”)传递给适配器而不仅仅是一个字符串列表,然后在选择的项目上你将获得所选对象然后你可以得到你需要的任何id或名称你可以按照这个链接来制作自定义适配器https://abhiandroid.com/ui/custom-spinner-examples.html


0
投票

我通过编辑代码解决了这个问题

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

并且在spinner上选择的项目使用子字符串进行操作

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);

0
投票

另一个解决问题

步骤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) {
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.