Android Spinner загружает содержимое на основе сравнения столбцов данных нескольких таблиц - PullRequest
1 голос
/ 05 ноября 2019

У меня есть пользовательский интерфейс, который состоит из трех счетчика и стола. (Spinner1, Spinner2, Spinner3) соответственно. Spinner2, Spinner3 значение свопа, основанное на выборе Spinner1. вставка конентов в таблицу (LABELS2) в соответствии с моими требованиями

Значение Spinner1, Spinner2, Spinner3 извлекается из одной таблицы "LABELS".

Все три значения счетчика вставляются в другую. table "LABELS2" при нажатии кнопки сохранения.

Требование: Spinner2 должен загружать содержимое на основе сравнения между таблицами "Labels" и "Labels2".

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

Пример: таблица «Метки» содержит три записи

1.("A1”,”EXTRA1”,”MORE1");
2,("A1”,”EXTRA2”,”MORE2");
3,("A1”,”EXTRA2”,”MORE2");

MainActivity

public class MainActivity extends AppCompatActivity {

    DatabaseHandler mDH;
    Spinner mSpinner1,mSpinner2,mSpinner3;
    Cursor mSpinner1Csr,mSpinner2Csr,mSpinner3Csr;
    SimpleCursorAdapter mSpinner1Adapter,mSpinner2Adapter,mSpinner3Adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSpinner1 = this.findViewById(R.id.spinner1);
        mSpinner2 = this.findViewById(R.id.spinner2);
        mSpinner3 = this.findViewById(R.id.spinner3);
        mDH = new DatabaseHandler(this);
        addSomeTestingData(); // ADD testing data if none
        manageSpinner1(); // Manages spinner1 not that spinner 1 invokes manage spinner2 and spinnr manages spinner3

    }

    private void addSomeTestingData() {
        if(DatabaseUtils.queryNumEntries(mDH.getWritableDatabase(),DatabaseHandler.TABLE_LABELS) > 0) return;

        // Data for LABELS2 table (spinner 1 (note 1st column listed in spinner))
        mDH.insertLabel("A1”,”EXTRA1”,”MORE1");
        mDH.insertLabel("A1”,”EXTRA2”,”MORE2");
        mDH.insertLabel("A1”,”EXTRA3”,”MORE5");

        mDH.insertLabel1("A1EXTRA1");
        mDH.insertLabel1("A1EXTRA2");
        mDH.insertLabel1("B1EXTRA1");
        mDH.insertLabel1("B1EXTRA2");
        mDH.insertLabel1("L1EXTRA1");
        mDH.insertLabel1("L1EXTRA2");

        // Data for LABELS table (spinner 1,2,3)
        mDH.insertlabel("A1”,”EXTRA1”,”MORE1");
        mDH.insertlabel("A1”,”EXTRA2”,”MORE2");
        mDH.insertlabel("A1”,”EXTRA3”,”MORE5");

    }

    private void manageSpinner1() {
        mSpinner1Csr = mDH.getAllLabelsForSpinner1AsCursor();
        if (mSpinner1Adapter == null) {
            mSpinner1Adapter = new SimpleCursorAdapter(
                    this,
                    android.R.layout.simple_list_item_1,
                    mSpinner1Csr,
                    new String[]{DatabaseHandler.KEY_NAME},
                    new int[]{android.R.id.text1},
                    0
            );
            mSpinner1.setAdapter(mSpinner1Adapter);
            mSpinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    manageSpinner2(mSpinner1Csr.getString(mSpinner1Csr.getColumnIndex(DatabaseHandler.ROUTE)));
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                }
            });
        } else {
            mSpinner1Adapter.swapCursor(mSpinner1Csr);
        }
    }
    private void manageSpinner2(String keyFromSpinner1) {
        mSpinner2Csr = mDH.getAllLabelsForSpinner2AsCursor(keyFromSpinner1);
        if (mSpinner2Adapter == null) {
            mSpinner2Adapter = new SimpleCursorAdapter(
                    this,
                    android.R.layout.simple_list_item_1,
                    mSpinner2Csr,
                    new String[]{DatabaseHandler.ROUTE},
                    new int[]{android.R.id.text1},
                    0
            );
            mSpinner2.setAdapter(mSpinner2Adapter);
            mSpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    manageSpinner3(mSpinner2Csr.getString(mSpinner2Csr.getColumnIndex(DatabaseHandler.ROUTE)));
                }

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

                }
            });
        } else {
            mSpinner2Adapter.swapCursor(mSpinner2Csr);
        }
    }

    private void manageSpinner3(String keyForSpinner3) {
        mSpinner3Csr = mDH.getAllLabelsForSpinner3AsCursor(keyForSpinner3);
        if (mSpinner3Adapter == null) {
            mSpinner3Adapter = new SimpleCursorAdapter(
                    this,
                    android.R.layout.simple_list_item_1,
                    mSpinner3Csr,
                    new String[]{DatabaseHandler.KEY_ID},
                    new int[]{android.R.id.text1},
                    0
            );
            mSpinner3.setAdapter(mSpinner3Adapter);
        } else {
            mSpinner3Adapter.swapCursor(mSpinner3Csr);
        }
    }
}

DatabaseHandler

public class DatabaseHandler extends SQLiteOpenHelper {
    // Database Version
    public static final int DATABASE_VERSION = 1;

    public static final String DATABASE_NAME = "spinnerExample";
    private final Context myContext;
    private SQLiteDatabase myDataBase;
    // Database Name
    // Labels table name
    public static final String TABLE_LABELS = "labels"; //<<<< Made public
    public static final String TABLE_LABELS1= "labels1";
    public static final String TABLE_LABELS2= "labels2";
    // Labels Table Columns names
    public static final String KEY_ID4 = "input_label";
    public static final String KEY_ID12 = "id2";           //<<<< Made public
    public static final String KEY_ID = "id";
    public static final String KEY_99 = "sno";           //<<<< Made public//<<<< Made public
    public static final String KEY_NAME = "name";       //<<<< made public
    public static final String KEY_ID1 = "id1";           //<<<< Made public
    public static final String KEY_NAME1 = "name1";
    public static final String KEY_1 = "number";           //<<<< Made public
    public static final String KEY_2 = "outletname";       //<<<< made public
    public static final String KEY_3 = "sunday";           //<<<< Made public
    public static final String KEY_4 = "monday";
    public static final String KEY_5 = "tuesday";
    public static final String KEY_6 = "wednesday";
    public static final String KEY_7 = "thursday";
    public static final String KEY_8 = "saturday";
    public static final String KEY_9 = "closed";
    public static final String KEY_10 = "calling";
    public static final String KEY_11 = "id3";
    public static final String ROUTE= "route";

    public DatabaseHandler(Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        myDataBase = this.getWritableDatabase();
        this.myContext = context;
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        //boolean dbExist = checkDataBase();
        // Category table create query
        String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + TABLE_LABELS + "("+ KEY_99 + " INTEGER,"
                + ROUTE + " TEXT," + KEY_ID + " TEXT," + KEY_NAME + " TEXT)";
        String CREATE_CATEGORIES_TABLE1 = "CREATE TABLE " + TABLE_LABELS1 + "("
                + KEY_ID1+ " TEXT," + KEY_NAME1+ " TEXT)";
        String CREATE_CATEGORIES_TABLE2 = "CREATE TABLE " + TABLE_LABELS2 + "("
                + KEY_11+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_1+ " TEXT," + KEY_2+ " TEXT," + KEY_3+ " TEXT)";
        db.execSQL(CREATE_CATEGORIES_TABLE);
        db.execSQL(CREATE_CATEGORIES_TABLE1);
        db.execSQL(CREATE_CATEGORIES_TABLE2);
    }
    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS1);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS2);
        // Create tables again
        onCreate(db);
    }

    /**
     * Inserting new lable into lables table
     * */



public void insertlabel(String text,String id9,String id, String label) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(KEY_99,text);
    cv.put(ROUTE,id9);
    cv.put(KEY_ID,id);
    cv.put(KEY_NAME,label);
    db.insert(TABLE_LABELS,null,cv);
    db.close();
}


    public void insertLabel(String message1, String message2,String message3){
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_1, message1);
        values.put(KEY_2, message2);
        values.put(KEY_3,message3);
        // Inserting Row
        db.insert(TABLE_LABELS2, null, values);
        //db.close(); // Closing database connection
    }

    public void insertLabel1(String label){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME1, label);
        db.insert(TABLE_LABELS1, null, values);
        //db.close(); // Closing database connection
    }

    public void insertLabel2(String label){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME, label);
        db.insert(TABLE_LABELS, null, values);
        db.close(); // Closing database connection
    }


    public Cursor getAllLabelsForSpinner1AsCursor() {
        String[] columns = new String[]{"rowid AS _id, *"}; // Need _id column for SimpleCursorAdapter
        return this.getWritableDatabase().query(TABLE_LABELS,columns,null,null,null,null,null);
    }


    public Cursor getAllLabelsForSpinner2AsCursor(String keyFromSinner1) {
        String[] columns = new String[]{"rowid AS _id, *"}; // Need _id column for SimpleCursorAdapter
        return this.getWritableDatabase().query(
                TABLE_LABELS,columns,
                DatabaseHandler.ROUTE + " LIKE ?",
                new String[]{keyFromSinner1+"%"},
                null,null,null
        );
    }

    public Cursor getAllLabelsForSpinner3AsCursor(String keyFromSpinner2) {
        String[] columns = new String[]{"rowid AS _id, *"}; // Need _id column for SimpleCursorAdapter
        return this.getWritableDatabase().query(
                TABLE_LABELS,columns,
                DatabaseHandler.ROUTE + " LIKE ?",
                new String[]{keyFromSpinner2 + "%"},
                null,null,null);
    }
}

Моделирование: Как вы можете ниже, при выборе первого счетчика «P1» показывает его соответствующую информацию

enter image description here

теперь второй счетчик отображает информацию, основанную на выборе первого счетчика. enter image description here

мы сохраняем информацию о каждом выборе.

Требование к счетчику 2: информация должна уменьшаться при сохранении данных.

пример: еслиВы выбираете «9001234», затем сохраняете информацию с помощью «9001234», а затем автоматически должно появиться «9003562» и т. д. в соответствии с сохранением информации.

С нетерпением ждем любой помощи.

...