Search code examples
androiddatabasesqliteandroid-sqlite

Values displayed when an item is clicked


I have an SQLite database with a table having 4 columns:

  • name,
  • quantity,
  • calories
  • measurements.

The values inserted in the column name are displayed in a spinner.

My question: is it possible to display the quantity values which correspond for a name when one item is clicked? If yes, then how can I get some guidance, please?


Solution

  • This is a database class to store data into database and alse perform all operations like delete, insert, update on this class.

    Database class

    public class DetailDatabase extends SQLiteOpenHelper {
    
      private static final String DATABASE_NAME = "Detail.db";
      public static final String TABLE_NAME = "Details";
    
      public static final String COLUMN_NAME = "NAME";
      public static final String COLUMN_QUANTITY = "QUANTITY";
      public static final String COLUMN_CALORIES = "CALORIES";
      public static final String COLUMN_MEASUREMENTS = "MEASUREMENTS";
    
      public SeriesDetailDatabase(Context context) {
        super(context, DATABASE_NAME, null, 1);
      }
    
      @Override
      public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(
                "create table  " + TABLE_NAME +
                        "( " +
                        COLUMN_NAME + "  varchar ," +
                        COLUMN_QUANTITY + " varchar," +
                        COLUMN_CALORIES + " varchar," +
                        COLUMN_MEASUREMENTS + " varchar)"
        );
      }
    
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL(" DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
      } 
    
      public boolean insertOrUpdateDetails(String name, String quantity, String calories, String measurements) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN_NAME, name);
        contentValues.put(COLUMN_QUANTITY, quantity);
        contentValues.put(COLUMN_CALORIES, calories);
        contentValues.put(COLUMN_MEASUREMENTS, measurements);
    
        int rows = db.update(TABLE_NAME, contentValues, COLUMN_NAME + " = " + name, null);
        if (rows == 0) {
            db.insert(TABLE_NAME, null, contentValues);
        }
        return true;
      }
    
      public Cursor getData(int id) {
        SQLiteDatabase db = this.getReadableDatabase();
        return db.rawQuery(" select * from " + TABLE_NAME + " where id= " + id + "", null);
      }
    
      public int numberOfRows() {
        SQLiteDatabase db = this.getReadableDatabase();
        return (int) DatabaseUtils.queryNumEntries(db, TABLE_NAME);
      }
    
      public boolean updateData(String name, String quantity) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN_QUANTITY, quantity);
        db.update(TABLE_NAME, contentValues, COLUMN_NAME + " = ? ", new String[]{name});
        return true;
      }
    
      public Integer deleteData(Integer id) {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete(TABLE_NAME, COLUMN_NAME + " = ? ", new String[]{Integer.toString(id)});
      }
    
      public void deleteRow(String value) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + COLUMN_BOOK_ID + "='" + value + "'");
        db.close();
      }
    
      public List<Model> getAllData() {
        List<Model> list = new LinkedList<>();
    
        // 1. build the query
        String query = "SELECT  * FROM " + TABLE_NAME + " ORDER BY " + COLUMN_NAME;
    
        // 2. get reference to writable DB
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
    
        // 3. go over each row, build book and add it to list
        Model model = null;
        if (cursor.moveToFirst()) {
            do {
                model = new Model();
                model.setName(cursor.getString(0));
                model.setQuantity(cursor.getString(1));
                model.setCalories(cursor.getString(2));
                model.setMeasurements(cursor.getString(3)) 
    
                // Add data to list
                list.add(model);
            } while (cursor.moveToNext());
        }
    
        db.close();
        return list;
      }
    
      public void deleteAll() {
        SQLiteDatabase db = this.getReadableDatabase();
        db.execSQL("DELETE FROM " + TABLE_NAME);
        db.close();
      }
    }
    

    This is a model class

    Model Class

    public class Model {
      private  String  Name="";
      private  String  Quantity="";
      private  String  Calories="";
      private  String  Measurements="";
    
      public String getName() {
        return Name;
      }
    
      public void setName(String name) {
        Name = name;
      }
    
      public String getQuantity() {
        return Quantity;
      }
    
      public void setQuantity(String quantity) {
        Quantity = quantity;
      }
    
      public String getCalories() {
        return Calories;
      }
    
      public void setCalories(calories) {
        Calories = calories;
      }
    
      public String getMeasurements() {
        return Measurements;
      }
    
      public void setMeasurements(String measurements) {
        Measurements = measurements;
      }
    }
    

    There is an adapter class for spinner.

    Adapter Class

        public class CustomAdapter extends ArrayAdapter<String> {
    
            private ArrayList data;
            private LayoutInflater inflater;
    
            public CustomAdapter(Context homeActivity, int spinner_rows, ArrayList customListViewValuesArr) {
                super(activity, spinner_rows, customListViewValuesArr);
                data = customListViewValuesArr;
                inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }
    
            @Override
            public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
                return getCustomView(position, parent);
            }
    
            @NonNull
            @Override
            public View getView(int position, View convertView, @NonNull ViewGroup parent) {
                return getCustomView(position, parent);
            }
    
            private View getCustomView(int position, ViewGroup parent) {
    
                View row = inflater.inflate(R.layout.list_item, parent, false);
    
                Model model;
                model = (Model) data.get(position);
    
                TextView mNameView = row.findViewById(R.id.tvName);
    
                mNameView.setText(model.getName());
    
                return row;
            }
        }
    

    This is a main activity class where you can set adapter on spinner.

    MainActivity

        package com.vrvirtual.lionservicescitizenapp;
    
        import android.annotation.SuppressLint;
        import android.app.Notification;
        import android.app.NotificationManager;
        public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private ArrayList<Model> list;
    
            private Model model;
    
            private Spinner mSpinnerView;
    
            private String Name = "";
            private String Quantity = "";
            private String Calories = "";
            private String Measurements = "";
            private DetailDatabase database;
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main); 
                database=new DetailDatabase(this);  
                database.insertOrUpdateDetails("ABC","1","1000","aaa");
                database.insertOrUpdateDetails("xyz","2","3000","bbb");
                try {
                    mSpinnerView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    
                        @Override
                        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
                            model=list.get(position);
                            Name = model.getName();
                            CitQuantityyName = model.getQuantity();
                            Calories = model.getCalories();
                            Measurements = model.getMeasurements();
                        }
    
                        @Override
                        public void onNothingSelected(AdapterView<?> adapter) {
                        }
                    });
            }
    
            private void setCityAdapter() {
                try {
                    list=database.getAllData();
                    ArrayAdapter adapter = new CostomAdapter(this, R.layout.list_item, list);
    
                    mSpinnerView.setAdapter(adapter);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            @Override
            public void onBackPressed() {
                super.onBackPressed();
            }
    
            @Override
            protected void onDestroy() {
                super.onDestroy();
                Log.i(TAG, "On Destroy .....");
            }
    
            @Override
            protected void onPause() {
                super.onPause();
                Log.i(TAG, "On Pause .....");
            }
    
            @Override
            protected void onRestart() {
                super.onRestart();
                Log.i(TAG, "On Restart .....");
            }
    
            @Override
            protected void onResume() {
                super.onResume();
                Log.i(TAG, "On Resume .....");
            }
    
            @Override
            protected void onStart() {
                super.onStart();
                Log.i(TAG, "On Start .....");
            }
    
            @Override
            protected void onStop() {
                super.onStop();
                Log.i(TAG, "On Stop .....");
            }
        }
    

    activity_main.xml

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
            <Spinner
                android:id="@id/fault_category"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
        </RelativeLayout>
    

    list_item.xml

        <RelativeLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <TextView
                android:id="@+id/tvName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </RelativeLayout>