【问题标题】:How implementation SQLite Join using spinner at Android Studio to get id from tables如何在 Android Studio 中使用 spinner 实现 SQLite Join 从表中获取 id
【发布时间】:2019-03-19 20:00:45
【问题描述】:

我在 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. 在微调器上显示

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

我需要id_sales 来输入值并保存到其他表 SQLite,但微调器必须显示销售名称。

【问题讨论】:

    标签: java android sqlite spinner


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        另一个解决问题

        第一步创建模型类

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

        第二步把SQLite表sales的所有数据放入

        //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) {
                }
            });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多