Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Java Arrays
  • Java Strings
  • Java OOPs
  • Java Collection
  • Java 8 Tutorial
  • Java Multithreading
  • Java Exception Handling
  • Java Programs
  • Java Project
  • Java Collections Interview
  • Java Interview Questions
  • Java MCQs
  • Spring
  • Spring MVC
  • Spring Boot
  • Hibernate
Open In App
Next Article:
How to Perform CRUD Operations in Room Database in Android?
Next article icon

How to Perform CRUD Operations in Room Database in Android?

Last Updated : 06 Jan, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Data from the app can be saved on users' devices in different ways. We can store data in the user's device in SQLite tables, shared preferences, and many more ways. In this article, we will take a look at saving data, reading, updating, and deleting data in Room Database on Android. We will perform CRUD operations using Room Database on Android. In this article, we will take a look at performing CRUD operations in Room Database in Android. 

What we are going to build in this article? 

We will be building a simple application in which we will be adding the different types of courses that are available on Geeks for Geeks. We will be storing all this data in Room Database and performing CRUD operations on these courses. A sample video is given below to get an idea about what we are going to do in this article. Note that we are going to implement this project using the Java language. 

What is Room? 

Room is a persistence library that provides an abstraction layer over the SQLite database to allow a more robust database. With the help of room, we can easily create the database and perform CRUD operations very easily. 

Components of Room

The three main components of the room are Entity, Database, and DAO. 

  • Entity: Entity is a modal class that is annotated with @Entity. This class is having variables that will be our columns and the class is our table.
  • Database: It is an abstract class where we will be storing all our database entries which we can call Entities.
  • DAO: The full form of DAO is a Database access object which is an interface class with the help of it we can perform different operations in our database.

Now, let's move towards the implementation of Room Database in Android. 

Step by Step Implementation

Step 1: Create a New Project

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.

Step 2: Adding dependency for using Room in build.gradle files

Navigate to the app > Gradle Scripts > build.gradle file and add the below dependencies in the dependencies section. 

// add below dependency for using room.  

implementation 'androidx.room:room-runtime:2.2.5'

annotationProcessor 'androidx.room:room-compiler:2.2.5'

// add below dependency for using lifecycle extensions for room.  

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0'

After adding the above dependencies section. Now sync your project and we will move towards our XML file. 

Step 3: Working with the activity_main.xml file 

Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file. 

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"     android:orientation="vertical"     tools:context=".MainActivity">      <!--recycler view to display our data-->     <androidx.recyclerview.widget.RecyclerView         android:id="@+id/idRVCourses"         android:layout_width="match_parent"         android:layout_height="match_parent" />      <!--fab to add new courses-->     <com.google.android.material.floatingactionbutton.FloatingActionButton         android:id="@+id/idFABAdd"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignParentEnd="true"         android:layout_alignParentBottom="true"         android:layout_marginStart="18dp"         android:layout_marginTop="18dp"         android:layout_marginEnd="18dp"         android:layout_marginBottom="18dp"         android:src="@android:drawable/ic_input_add"         app:tint="@color/white" />      </RelativeLayout> 

Step 4: Creating a modal class for storing our data

Navigate to the app > java > your apps package name > Right-click on it > New > Java class and name the class as CourseModal and add the below code to it. Comments are added inside the code to understand the code in more detail. 

Java
import androidx.room.Entity; import androidx.room.PrimaryKey;  // below line is for setting table name. @Entity(tableName = "course_table") public class CourseModal {      // below line is to auto increment     // id for each course.     @PrimaryKey(autoGenerate = true)          // variable for our id.     private int id;          // below line is a variable      // for course name.     private String courseName;         // below line is use for      // course description.     private String courseDescription;          // below line is use      // for course duration.     private String courseDuration;      // below line we are creating constructor class.     // inside constructor class we are not passing      // our id because it is incrementing automatically     public CourseModal(String courseName, String courseDescription, String courseDuration) {         this.courseName = courseName;         this.courseDescription = courseDescription;         this.courseDuration = courseDuration;     }      // on below line we are creating     // getter and setter methods.     public String getCourseName() {         return courseName;     }      public void setCourseName(String courseName) {         this.courseName = courseName;     }      public String getCourseDescription() {         return courseDescription;     }      public void setCourseDescription(String courseDescription) {         this.courseDescription = courseDescription;     }      public String getCourseDuration() {         return courseDuration;     }      public void setCourseDuration(String courseDuration) {         this.courseDuration = courseDuration;     }      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     } } 

Step 5: Creating a Dao interface for our database

Navigate to the app > java > your app's package name > Right-click on it > New > Java class and name as Dao and select Interface. After creating an interface class and add the below code to it. Comments are added inside the code to understand the code in more detail.

Java
import androidx.lifecycle.LiveData; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update;  import java.util.List;  // Adding annotation  // to our Dao class @androidx.room.Dao public interface Dao {      // below method is use to      // add data to database.     @Insert     void insert(CourseModal model);      // below method is use to update      // the data in our database.     @Update     void update(CourseModal model);      // below line is use to delete a      // specific course in our database.     @Delete     void delete(CourseModal model);      // on below line we are making query to     // delete all courses from our database.     @Query("DELETE FROM course_table")     void deleteAllCourses();      // below line is to read all the courses from our database.     // in this we are ordering our courses in ascending order      // with our course name.     @Query("SELECT * FROM course_table ORDER BY courseName ASC")     LiveData<List<CourseModal>> getAllCourses(); } 

Step 6: Creating a database class

Navigate to the app > java > your app's package name > Right-click on it > New > Java class and name it as CourseDatabase and add the below code to it. Comments are added inside the code to understand the code in more detail.

Java
import android.content.Context; import android.os.AsyncTask;  import androidx.annotation.NonNull; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;  // adding annotation for our database entities and db version. @Database(entities = {CourseModal.class}, version = 1) public abstract class CourseDatabase extends RoomDatabase {      // below line is to create instance     // for our database class.     private static CourseDatabase instance;      // below line is to create     // abstract variable for dao.     public abstract Dao Dao();      // on below line we are getting instance for our database.     public static synchronized CourseDatabase getInstance(Context context) {         // below line is to check if          // the instance is null or not.         if (instance == null) {             // if the instance is null we             // are creating a new instance             instance =                     // for creating a instance for our database                      // we are creating a database builder and passing                      // our database class with our database name.                     Room.databaseBuilder(context.getApplicationContext(),                             CourseDatabase.class, "course_database")                             // below line is use to add fall back to                              // destructive migration to our database.                             .fallbackToDestructiveMigration()                             // below line is to add callback                              // to our database.                             .addCallback(roomCallback)                             // below line is to                              // build our database.                             .build();         }         // after creating an instance          // we are returning our instance         return instance;     }      // below line is to create a callback for our room database.     private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() {         @Override         public void onCreate(@NonNull SupportSQLiteDatabase db) {             super.onCreate(db);             // this method is called when database is created             // and below line is to populate our data.             new PopulateDbAsyncTask(instance).execute();         }     };      // we are creating an async task class to perform task in background.     private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {         PopulateDbAsyncTask(CourseDatabase instance) {             Dao dao = instance.Dao();         }         @Override         protected Void doInBackground(Void... voids) {             return null;         }     } } 

Step 7: Create a new java class for our Repository

Navigate to the app > java > your app's package name > Right-click on it > New > Java class and name it as CourseRepository and add the below code to it. Comments are added inside the code to understand the code in more detail.

Java
import android.app.Application; import android.os.AsyncTask;  import androidx.lifecycle.LiveData;  import java.util.List;  public class CourseRepository {          // below line is the create a variable      // for dao and list for all courses.     private Dao dao;     private LiveData<List<CourseModal>> allCourses;      // creating a constructor for our variables     // and passing the variables to it.     public CourseRepository(Application application) {         CourseDatabase database = CourseDatabase.getInstance(application);         dao = database.Dao();         allCourses = dao.getAllCourses();     }      // creating a method to insert the data to our database.     public void insert(CourseModal model) {         new InsertCourseAsyncTask(dao).execute(model);     }      // creating a method to update data in database.     public void update(CourseModal model) {         new UpdateCourseAsyncTask(dao).execute(model);     }      // creating a method to delete the data in our database.     public void delete(CourseModal model) {         new DeleteCourseAsyncTask(dao).execute(model);     }      // below is the method to delete all the courses.     public void deleteAllCourses() {         new DeleteAllCoursesAsyncTask(dao).execute();     }      // below method is to read all the courses.     public LiveData<List<CourseModal>> getAllCourses() {         return allCourses;     }      // we are creating a async task method to insert new course.     private static class InsertCourseAsyncTask extends AsyncTask<CourseModal, Void, Void> {         private Dao dao;          private InsertCourseAsyncTask(Dao dao) {             this.dao = dao;         }          @Override         protected Void doInBackground(CourseModal... model) {             // below line is use to insert our modal in dao.             dao.insert(model[0]);             return null;         }     }      // we are creating a async task method to update our course.     private static class UpdateCourseAsyncTask extends AsyncTask<CourseModal, Void, Void> {         private Dao dao;          private UpdateCourseAsyncTask(Dao dao) {             this.dao = dao;         }          @Override         protected Void doInBackground(CourseModal... models) {             // below line is use to update             // our modal in dao.             dao.update(models[0]);             return null;         }     }      // we are creating a async task method to delete course.     private static class DeleteCourseAsyncTask extends AsyncTask<CourseModal, Void, Void> {         private Dao dao;          private DeleteCourseAsyncTask(Dao dao) {             this.dao = dao;         }          @Override         protected Void doInBackground(CourseModal... models) {             // below line is use to delete              // our course modal in dao.             dao.delete(models[0]);             return null;         }     }      // we are creating a async task method to delete all courses.     private static class DeleteAllCoursesAsyncTask extends AsyncTask<Void, Void, Void> {         private Dao dao;         private DeleteAllCoursesAsyncTask(Dao dao) {             this.dao = dao;         }         @Override         protected Void doInBackground(Void... voids) {             // on below line calling method             // to delete all courses.             dao.deleteAllCourses();             return null;         }     } } 

Step 8: Creating a class for our Repository

Navigate to the app > java > your app's package name > Right-click on it > New > Java Class and name the class as ViewModal and add the below code to it. Comments are added inside the code to understand the code in more detail.

Java
import android.app.Application;  import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData;  import java.util.List;  public class ViewModal extends AndroidViewModel {          // creating a new variable for course repository.     private CourseRepository repository;         // below line is to create a variable for live      // data where all the courses are present.     private LiveData<List<CourseModal>> allCourses;      // constructor for our view modal.     public ViewModal(@NonNull Application application) {         super(application);         repository = new CourseRepository(application);         allCourses = repository.getAllCourses();     }          // below method is use to insert the data to our repository.     public void insert(CourseModal model) {         repository.insert(model);     }      // below line is to update data in our repository.     public void update(CourseModal model) {         repository.update(model);     }      // below line is to delete the data in our repository.     public void delete(CourseModal model) {         repository.delete(model);     }      // below method is to delete all the courses in our list.     public void deleteAllCourses() {         repository.deleteAllCourses();     }      // below method is to get all the courses in our list.     public LiveData<List<CourseModal>> getAllCourses() {         return allCourses;     } } 

Step 9: Creating a layout file for each item of RecyclerView

Navigate to the app > res > layout > Right-click on it > New > layout resource file and name it as course_rv_item and add below code to it. Comments are added in the code to get to know in more detail. 

XML
<?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView      xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:layout_margin="5dp"     android:elevation="8dp"     app:cardCornerRadius="8dp">      <LinearLayout         android:id="@+id/idLLCourse"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_margin="5dp"         android:orientation="vertical">          <!--text view for our course name-->         <TextView             android:id="@+id/idTVCourseName"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:padding="8dp"             android:text="Course Name"             android:textColor="@color/black"             android:textSize="15sp" />          <!--text view for our course duration-->         <TextView             android:id="@+id/idTVCourseDuration"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:padding="8dp"             android:text="Course Duration"             android:textColor="@color/black"             android:textSize="15sp" />          <!--text view for our course description-->         <TextView             android:id="@+id/idTVCourseDescription"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:padding="8dp"             android:text="Course Description"             android:textColor="@color/black"             android:textSize="15sp" />     </LinearLayout>      </androidx.cardview.widget.CardView> 

Step 10: Creating a RecyclerView Adapter class to set data for each item of RecyclerView

Navigate to the app > java > your app's package name > Right-click on it > New > Java class and name it as CourseRVAdapter and add the below code to it. Comments are added inside the code to understand the code in more detail.

Java
import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;  import androidx.annotation.NonNull; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.RecyclerView;  public class CourseRVAdapter extends ListAdapter<CourseModal, CourseRVAdapter.ViewHolder> {          // creating a variable for on item click listener.     private OnItemClickListener listener;      // creating a constructor class for our adapter class.     CourseRVAdapter() {         super(DIFF_CALLBACK);     }      // creating a call back for item of recycler view.     private static final DiffUtil.ItemCallback<CourseModal> DIFF_CALLBACK = new DiffUtil.ItemCallback<CourseModal>() {         @Override         public boolean areItemsTheSame(CourseModal oldItem, CourseModal newItem) {             return oldItem.getId() == newItem.getId();         }          @Override         public boolean areContentsTheSame(CourseModal oldItem, CourseModal newItem) {             // below line is to check the course name, description and course duration.             return oldItem.getCourseName().equals(newItem.getCourseName()) &&                     oldItem.getCourseDescription().equals(newItem.getCourseDescription()) &&                     oldItem.getCourseDuration().equals(newItem.getCourseDuration());         }     };      @NonNull     @Override     public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {         // below line is use to inflate our layout         // file for each item of our recycler view.         View item = LayoutInflater.from(parent.getContext())                 .inflate(R.layout.course_rv_item, parent, false);         return new ViewHolder(item);     }      @Override     public void onBindViewHolder(@NonNull ViewHolder holder, int position) {         // below line of code is use to set data to         // each item of our recycler view.         CourseModal model = getCourseAt(position);         holder.courseNameTV.setText(model.getCourseName());         holder.courseDescTV.setText(model.getCourseDescription());         holder.courseDurationTV.setText(model.getCourseDuration());     }      // creating a method to get course modal for a specific position.     public CourseModal getCourseAt(int position) {         return getItem(position);     }      public class ViewHolder extends RecyclerView.ViewHolder {         // view holder class to create a variable for each view.         TextView courseNameTV, courseDescTV, courseDurationTV;          ViewHolder(@NonNull View itemView) {             super(itemView);             // initializing each view of our recycler view.             courseNameTV = itemView.findViewById(R.id.idTVCourseName);             courseDescTV = itemView.findViewById(R.id.idTVCourseDescription);             courseDurationTV = itemView.findViewById(R.id.idTVCourseDuration);                          // adding on click listener for each item of recycler view.             itemView.setOnClickListener(new View.OnClickListener() {                 @Override                 public void onClick(View v) {                     // inside on click listener we are passing                      // position to our item of recycler view.                     int position = getAdapterPosition();                     if (listener != null && position != RecyclerView.NO_POSITION) {                         listener.onItemClick(getItem(position));                     }                 }             });         }     }      public interface OnItemClickListener {         void onItemClick(CourseModal model);     }     public void setOnItemClickListener(OnItemClickListener listener) {         this.listener = listener;     } } 

Step 11: Creating a new Activity for Adding and Updating our Course

Navigate to the app > java > your app's package name > Right-click on it > New > Empty Activity and name it as NewCourseActivity and go to XML part and add below code to it. Below is the code for the activity_new_course.xml file.

XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     tools:context=".NewCourseActivity">          <!--edit text for our course name-->     <EditText         android:id="@+id/idEdtCourseName"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_margin="10dp"         android:hint="Enter Course Name" />      <!--edit text for our course description-->     <EditText         android:id="@+id/idEdtCourseDescription"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_margin="10dp"         android:hint="Enter Course Description" />      <!--edit text for course description-->     <EditText         android:id="@+id/idEdtCourseDuration"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_margin="10dp"         android:hint="Course Duration" />      <!--button for saving data to room database-->     <Button         android:id="@+id/idBtnSaveCourse"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_margin="10dp"         android:padding="5dp"         android:text="Save your course"         android:textAllCaps="false" />      </LinearLayout> 

Step 12: Working with the NewCourseActivity.java file

Navigate to the app > java > your app's package name > NewCourseActivity.java file and add the below code to it. Comments are added inside the code to understand the code in more detail.

Java
import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;  import androidx.appcompat.app.AppCompatActivity;  public class NewCourseActivity extends AppCompatActivity {      // creating a variables for our button and edittext.     private EditText courseNameEdt, courseDescEdt, courseDurationEdt;     private Button courseBtn;      // creating a constant string variable for our      // course name, description and duration.     public static final String EXTRA_ID = "com.gtappdevelopers.gfgroomdatabase.EXTRA_ID";     public static final String EXTRA_COURSE_NAME = "com.gtappdevelopers.gfgroomdatabase.EXTRA_COURSE_NAME";     public static final String EXTRA_DESCRIPTION = "com.gtappdevelopers.gfgroomdatabase.EXTRA_COURSE_DESCRIPTION";     public static final String EXTRA_DURATION = "com.gtappdevelopers.gfgroomdatabase.EXTRA_COURSE_DURATION";          @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_new_course);                  // initializing our variables for each view.         courseNameEdt = findViewById(R.id.idEdtCourseName);         courseDescEdt = findViewById(R.id.idEdtCourseDescription);         courseDurationEdt = findViewById(R.id.idEdtCourseDuration);         courseBtn = findViewById(R.id.idBtnSaveCourse);                  // below line is to get intent as we         // are getting data via an intent.         Intent intent = getIntent();         if (intent.hasExtra(EXTRA_ID)) {             // if we get id for our data then we are             // setting values to our edit text fields.             courseNameEdt.setText(intent.getStringExtra(EXTRA_COURSE_NAME));             courseDescEdt.setText(intent.getStringExtra(EXTRA_DESCRIPTION));             courseDurationEdt.setText(intent.getStringExtra(EXTRA_DURATION));         }         // adding on click listener for our save button.         courseBtn.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 // getting text value from edittext and validating if                 // the text fields are empty or not.                 String courseName = courseNameEdt.getText().toString();                 String courseDesc = courseDescEdt.getText().toString();                 String courseDuration = courseDurationEdt.getText().toString();                 if (courseName.isEmpty() || courseDesc.isEmpty() || courseDuration.isEmpty()) {                     Toast.makeText(NewCourseActivity.this, "Please enter the valid course details.", Toast.LENGTH_SHORT).show();                     return;                 }                 // calling a method to save our course.                 saveCourse(courseName, courseDesc, courseDuration);             }         });     }      private void saveCourse(String courseName, String courseDescription, String courseDuration) {         // inside this method we are passing          // all the data via an intent.         Intent data = new Intent();                  // in below line we are passing all our course detail.         data.putExtra(EXTRA_COURSE_NAME, courseName);         data.putExtra(EXTRA_DESCRIPTION, courseDescription);         data.putExtra(EXTRA_DURATION, courseDuration);         int id = getIntent().getIntExtra(EXTRA_ID, -1);         if (id != -1) {             // in below line we are passing our id.             data.putExtra(EXTRA_ID, id);         }                  // at last we are setting result as data.         setResult(RESULT_OK, data);                  // displaying a toast message after adding the data         Toast.makeText(this, "Course has been saved to Room Database. ", Toast.LENGTH_SHORT).show();     } } 

Step 13: Working with the MainActivity.java file

Navigate to the app > java > your app's package name > MainActivity.java file and add the below code to it. Comments are added inside the code to understand the code in more detail.

Java
import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Toast;  import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView;  import com.google.android.material.floatingactionbutton.FloatingActionButton;  import java.util.List;  public class MainActivity extends AppCompatActivity {      // creating a variables for our recycler view.     private RecyclerView coursesRV;     private static final int ADD_COURSE_REQUEST = 1;     private static final int EDIT_COURSE_REQUEST = 2;     private ViewModal viewmodal;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);                 // initializing our variable for our recycler view and fab.         coursesRV = findViewById(R.id.idRVCourses);         FloatingActionButton fab = findViewById(R.id.idFABAdd);          // adding on click listener for floating action button.         fab.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 // starting a new activity for adding a new course                  // and passing a constant value in it.                 Intent intent = new Intent(MainActivity.this, NewCourseActivity.class);                 startActivityForResult(intent, ADD_COURSE_REQUEST);             }         });          // setting layout manager to our adapter class.         coursesRV.setLayoutManager(new LinearLayoutManager(this));         coursesRV.setHasFixedSize(true);                 // initializing adapter for recycler view.         final CourseRVAdapter adapter = new CourseRVAdapter();                  // setting adapter class for recycler view.         coursesRV.setAdapter(adapter);                  // passing a data from view modal.         viewmodal = ViewModelProviders.of(this).get(ViewModal.class);                 // below line is use to get all the courses from view modal.         viewmodal.getAllCourses().observe(this, new Observer<List<CourseModal>>() {             @Override             public void onChanged(List<CourseModal> models) {                 // when the data is changed in our models we are                 // adding that list to our adapter class.                 adapter.submitList(models);             }         });         // below method is use to add swipe to delete method for item of recycler view.         new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {             @Override             public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {                 return false;             }              @Override             public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {                 // on recycler view item swiped then we are deleting the item of our recycler view.                 viewmodal.delete(adapter.getCourseAt(viewHolder.getAdapterPosition()));                 Toast.makeText(MainActivity.this, "Course deleted", Toast.LENGTH_SHORT).show();             }         }).                 // below line is use to attach this to recycler view.                         attachToRecyclerView(coursesRV);         // below line is use to set item click listener for our item of recycler view.         adapter.setOnItemClickListener(new CourseRVAdapter.OnItemClickListener() {             @Override             public void onItemClick(CourseModal model) {                 // after clicking on item of recycler view                 // we are opening a new activity and passing                  // a data to our activity.                 Intent intent = new Intent(MainActivity.this, NewCourseActivity.class);                 intent.putExtra(NewCourseActivity.EXTRA_ID, model.getId());                 intent.putExtra(NewCourseActivity.EXTRA_COURSE_NAME, model.getCourseName());                 intent.putExtra(NewCourseActivity.EXTRA_DESCRIPTION, model.getCourseDescription());                 intent.putExtra(NewCourseActivity.EXTRA_DURATION, model.getCourseDuration());                                  // below line is to start a new activity and                  // adding a edit course constant.                 startActivityForResult(intent, EDIT_COURSE_REQUEST);             }         });     }      @Override     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {         super.onActivityResult(requestCode, resultCode, data);         if (requestCode == ADD_COURSE_REQUEST && resultCode == RESULT_OK) {             String courseName = data.getStringExtra(NewCourseActivity.EXTRA_COURSE_NAME);             String courseDescription = data.getStringExtra(NewCourseActivity.EXTRA_DESCRIPTION);             String courseDuration = data.getStringExtra(NewCourseActivity.EXTRA_DURATION);             CourseModal model = new CourseModal(courseName, courseDescription, courseDuration);             viewmodal.insert(model);             Toast.makeText(this, "Course saved", Toast.LENGTH_SHORT).show();         } else if (requestCode == EDIT_COURSE_REQUEST && resultCode == RESULT_OK) {             int id = data.getIntExtra(NewCourseActivity.EXTRA_ID, -1);             if (id == -1) {                 Toast.makeText(this, "Course can't be updated", Toast.LENGTH_SHORT).show();                 return;             }             String courseName = data.getStringExtra(NewCourseActivity.EXTRA_COURSE_NAME);             String courseDesc = data.getStringExtra(NewCourseActivity.EXTRA_DESCRIPTION);             String courseDuration = data.getStringExtra(NewCourseActivity.EXTRA_DURATION);             CourseModal model = new CourseModal(courseName, courseDesc, courseDuration);             model.setId(id);             viewmodal.update(model);             Toast.makeText(this, "Course updated", Toast.LENGTH_SHORT).show();         } else {             Toast.makeText(this, "Course not saved", Toast.LENGTH_SHORT).show();         }     } } 

Now run your app and see the output of the app. 

Output:

Check out the project on the below link: https://github.com/ChaitanyaMunje/GFG-Room-Database


Next Article
How to Perform CRUD Operations in Room Database in Android?

C

chaitanyamunje
Improve
Article Tags :
  • Java
  • Technical Scripter
  • Android
  • Technical Scripter 2020
Practice Tags :
  • Java

Similar Reads

    How to Prepopulate Room Database in Android?
    Room is one of the Jetpack Architecture Components in Android. This provides an abstract layer over the SQLite Database to save and perform the operations on persistent data locally. This is recommended by Google over SQLite Database although the SQLite APIs are more powerful they are fairly low-lev
    3 min read
    How to Update Data in Realm Database in Android?
    In previous articles, we have seen adding and reading data from our realm database in Android. In that article, we were adding course details in our database and reading the data in the form of a list. In this article, we will take a look at updating this data in our android app.  What we are going
    7 min read
    Room Database with Kotlin Coroutines in Android
    This project will be used for the implementation phase. If you have not yet completed the project, you should do so and then return. To keep things simple, the project employs a basic MVVM architecture. The complete code for the implementation mentioned in this blog can be found in the project itsel
    3 min read
    How to Delete Data in Realm Database in Android?
    In the previous series of articles on the realm database, we have seen adding, reading, and updating data using the realm database in android. In that articles, we were adding course details, reading them, and updating them. In this article, we will take a look at deleting these course details from
    6 min read
    How to Read Data from Realm Database in Android?
    In the previous article, we have seen adding data to the realm database in Android. In this article, we will take a look at reading this data from our Realm Database in the Android app.  What we are going to build in this article?  In this article, we will be simply adding a Button to open a new act
    8 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences