lundi 25 janvier 2016

Spinner with category and sub-category using SQLite in android

I want my first spinner as category and the second one is category . Whenever a category is choosed only relevant sub-categories will be shown on 2nd spinner.This is my Activity class.

public class AndroidActivity extends Activity {
    Spinner mSpinnerModel, mSpinnerYear, mSpinnerMake;
    Button mButtonShow;
    TextView mTextViewResult;
    String selectedOption;


    String selectedModel = "";
    String selectedMake = "";
    String selectedYear = "";
    SQLiteDatabase mSqLiteDatabase;

    List<String> models = new ArrayList<String>();
    List<String> makes = new ArrayList<String>();
    List<String> years = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.android_fragment);

        final DatabaseClient dbClient = new DatabaseClient(AndroidActivity.this);
        mSqLiteDatabase = dbClient.getReadableDatabase();

        fetchDataFromDBForSpinners(mSqLiteDatabase);

        mSpinnerModel = (Spinner) findViewById(R.id.spinnerModel);
        mSpinnerYear = (Spinner) findViewById(R.id.spinnerYear);
        mSpinnerMake = (Spinner) findViewById(R.id.spinnerMake);
        mButtonShow = (Button) findViewById(R.id.buttonShow);
        mTextViewResult = (TextView) findViewById(R.id.textViewResult);




        ArrayAdapter<String> yearAdapter = new ArrayAdapter<String>(AndroidActivity.this, android.R.layout.simple_spinner_item, years);



        yearAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


        mSpinnerYear.setAdapter(yearAdapter);

        mSpinnerModel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (selectedModel.equals("CAR_MODELS")) {
                    Collections.addAll(models,selectedModel);
                    ArrayAdapter<String> modelAdapter = new ArrayAdapter<String>(AndroidActivity.this, android.R.layout.simple_spinner_item, models);

                    modelAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    modelAdapter.notifyDataSetChanged();
                    mSpinnerMake.setAdapter(modelAdapter);
                    ArrayAdapter<String> makeAdapter = new ArrayAdapter<String>(AndroidActivity.this, android.R.layout.simple_spinner_item, makes);
                    makeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                }
            }

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

            }
        });

        mSpinnerYear.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                selectedYear = parent.getItemAtPosition(position).toString();
                // Showing selected spinner item
                Toast.makeText(parent.getContext(), "Selected Year: " + selectedYear, Toast.LENGTH_LONG).show();
            }

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

            }
        });

        mButtonShow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String eligibleBattery=fetchEligibleBattery(mSqLiteDatabase);
                mTextViewResult.setText(eligibleBattery);
            }
        });

    }

    private String fetchEligibleBattery(SQLiteDatabase db) {

        String battery="";
        String SELECT_BATTERY_QUERY = "SELECT "+ DatabaseConstant.KEY_CAR_BATTERY+" FROM " + DatabaseConstant.TABLE_CAR_DETAILS + " WHERE " + DatabaseConstant.KEY_CAR_MAKE + " ='" +selectedMake +
                "' AND "+ DatabaseConstant.KEY_CAR_MODEL +" = '"+ selectedModel+ "' AND "+ DatabaseConstant.KEY_CAR_YEAR+"= '"+selectedYear +"' ;";
        Log.d("Database", "Battery Select Query : " + SELECT_BATTERY_QUERY);
        Cursor cursor = db.rawQuery(SELECT_BATTERY_QUERY, null);
        try {
            if (cursor.moveToFirst()) {
                battery=cursor.getString(cursor.getColumnIndex(DatabaseConstant.KEY_CAR_BATTERY));
            }
        } catch (Exception e) {
            Log.d("Database", "Error while trying to get icons from database");
        } finally {
            if (cursor != null && !cursor.isClosed()) {
                cursor.close();
            }
        }
        return battery;
    }

    public void fetchDataFromDBForSpinners(SQLiteDatabase db) {


        String SELECT_MODELS_QUERY = "SELECT * FROM " + DatabaseConstant.TABLE_CAR_DETAILS + ";";

        String model, make, year;
        Cursor cursor = db.rawQuery(SELECT_MODELS_QUERY, null);
        try {
            if (cursor.moveToFirst()) {
                do {
                    model = cursor.getString(cursor.getColumnIndex(DatabaseConstant.KEY_CAR_MODEL));
                    make = cursor.getString(cursor.getColumnIndex(DatabaseConstant.KEY_CAR_MAKE));
                    year = cursor.getString(cursor.getColumnIndex(DatabaseConstant.KEY_CAR_YEAR));

                    models.add(model);
                    makes.add(make);
                    years.add(year);

                } while (cursor.moveToNext());
            }
        } catch (Exception e) {
            Log.d("DATABASE", "Error while trying to get events from database");
        } finally {
            if (cursor != null && !cursor.isClosed()) {
                cursor.close();
            }
        }

    }}
 And this is my DBclass.


 public class DatabaseClient extends SQLiteOpenHelper {
        public DatabaseClient(Context context) {
            super(context, DatabaseConstant.DATABASE_NAME, null, DatabaseConstant.DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
          createTables(db);
            insertDataInCarTable(db);
            insertDataIntruckTable(db);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS" + DatabaseConstant.TABLE_CAR_DETAILS + " ;");
            db.execSQL("DROP TABLE IF EXISTS" + DatabaseConstant.TABLE_TRUCK_DETAILS + " ;");

            onCreate(db);
        }
    private void createTables(SQLiteDatabase db) {
        String CREATE_TABLE_CAR_DETAILS = " CREATE TABLE " + DatabaseConstant.TABLE_CAR_DETAILS +
                " ( " +
                DatabaseConstant.KEY_ENTRY_ID + " INTEGER NOT NULL, " + //define primary key
                DatabaseConstant.KEY_CAR_MODEL + " TEXT, " +
                DatabaseConstant.KEY_CAR_MAKE + " TEXT, " +
                DatabaseConstant.KEY_CAR_YEAR + " TEXT, " +
                DatabaseConstant.KEY_CAR_BATTERY + " TEXT, " +
                " PRIMARY KEY ( " + DatabaseConstant.KEY_ENTRY_ID + " ));";
        Log.d("Db Create Query", CREATE_TABLE_CAR_DETAILS);
        db.execSQL(CREATE_TABLE_CAR_DETAILS);


        String CREATE_TABLE_TRUCK_DETAILS = "CREATE TABLE " +DatabaseConstant.TABLE_TRUCK_DETAILS+
                " ( "+
                DatabaseConstant.KEY_tENTRY_ID+" INTEGER NOT NULL, "+
                DatabaseConstant.KEY_TRUCK_MODEL+" TEXT, "+
                DatabaseConstant.KEY_TRUCK_MAKE+" TEXT, "+
                DatabaseConstant.KEY_TRUCK_YEAR+" TEXT, "+
                DatabaseConstant.KEY_TRUCK_BATTERY+" TEXT, "+
                " PRIMARY KEY ( "+ DatabaseConstant.KEY_tENTRY_ID+" ));";
        Log.d("Db Create Query", CREATE_TABLE_TRUCK_DETAILS);
        db.execSQL(CREATE_TABLE_TRUCK_DETAILS);
    }
        private void insertDataInCarTable(SQLiteDatabase db) {

            String[] CAR_MODELS = {"College1","College2","College3"};
            String[] CAR_MAKES = {"make1", "make2", "make3", "make4", "make5","make6","make7","make8"};
            String[] CAR_YEARS = {"year1", "year2", "year3", "year4", "year5", "year6", "year7"};
            String[] CAR_BATTERY = {"Battery1", "Battery2", "Battery3", "Battery4", "Battery1-200", "Battery1-11", "LION-Battery1", "Battery1-EE", "Battery1-90"};

            db.beginTransaction();
            try {
                for (int i = 0; i < CAR_MODELS.length && i < CAR_MAKES.length && i < CAR_YEARS.length && i < CAR_BATTERY.length; i++) {
                    ContentValues contentValues = new ContentValues();
                    contentValues.put(DatabaseConstant.KEY_ENTRY_ID, i + 1);
                    contentValues.put(DatabaseConstant.KEY_CAR_MODEL, CAR_MODELS[i]);
                    contentValues.put(DatabaseConstant.KEY_CAR_MAKE, CAR_MAKES[i]);
                    contentValues.put(DatabaseConstant.KEY_CAR_YEAR, CAR_YEARS[i]);
                    contentValues.put(DatabaseConstant.KEY_CAR_BATTERY, CAR_BATTERY[i]);
                    db.insertOrThrow(DatabaseConstant.TABLE_CAR_DETAILS, null, contentValues);
                }
                db.setTransactionSuccessful();
            } catch (Exception e) {
                Log.d("DATABASE", "ERROR while trying to add better the dtabse");
            } finally {
                db.endTransaction();
            }
        }
            private void insertDataIntruckTable(SQLiteDatabase db){

                String[] TRUCK_MODELS = {"tmodel1", "tmodel3", "tmodel4", "tmodel2", "tmodel5", "tmodel1 C2E", "tmodel1 E SERIES", "tmodel1 CC"};
                String[] TRUCK_MAKES = {"make1", "make2", "make3", "make4", "make5"};
                String[] TRUCK_YEARS = {"1957", "2009", "2015", "2003", "2011", "2000", "2002"};
                String[] TRUCK_BATTERY = {"RTEK1", "RTEK2", "RTEK3", "RTEK4", "LION-200", "LION-11", "LION-211", "LION-EE", "LION-90"};
    db.beginTransaction();
                try{
                    for(int i =0;i<TRUCK_MODELS.length&&i<TRUCK_MAKES.length&&i<TRUCK_YEARS.length&&i<TRUCK_BATTERY.length;i++){
                        ContentValues contentValues = new ContentValues();
                        contentValues.put(DatabaseConstant.KEY_tENTRY_ID,i+1);
                        contentValues.put(DatabaseConstant.KEY_CAR_MODEL,TRUCK_MODELS[i]);
                        contentValues.put(DatabaseConstant.KEY_TRUCK_MAKE,TRUCK_MAKES[i]);
                        contentValues.put(DatabaseConstant.KEY_TRUCK_YEAR,TRUCK_YEARS[i]);
                        contentValues.put(DatabaseConstant.KEY_TRUCK_BATTERY,TRUCK_BATTERY[i]);
                        db.insertOrThrow(DatabaseConstant.TABLE_TRUCK_DETAILS,null,contentValues);
                    }
                    db.setTransactionSuccessful();
                }catch (Exception e){
                    Log.d("DATABASE", "ERROR WHile trying to add bettER  the database");
                }finally {
                    db.endTransaction();
    }

}

what should i do to make first spinner act like category and 2nd spinner like sub-category

Aucun commentaire:

Enregistrer un commentaire