Insert Custom list and get that list in Room database using TypeConverter

Save

We have now that Google announced a set of new libraries for designing Android application’s architecture — Android Architecture Components. And the Room persistent library is one of them.

Before reading this blog you have to sound knowledge of room persistent library, Please read the below blog first,

Android Room Persistence Library

 

Now we can start.

What is TypeConverters in Room?

When you want to store some custom types objects like the e.g lists, models, list of models etc, in the database, you can use Type Converters. It converts your custom object type into a known type in terms of database types. This is most useful features of Room persistent library.

How to create your TypeConverter

Below is the simple Entity class,

We can easily see that the option_values column is the list of OptionValues model.  So if you run the project it will show some error,

So the question is how to insert the custom types in DB, and your answer is type converters, but how to add?

adding the Type converters

First of all simply create a type converter class, Named DataConverter

Note we’ve added a new annotation TypeConverter, which allows you to persists a specific custom type into a database. In above class functions(or type converters) simply convert your list of models into Strings and vise-versa.

if you want to use this type converter, you can simply @TypeConverters(DataConverter.class) put in above your objects or add it to your app database class.

E.g,

or,

Wow now you have successfully added type converters in your app, now you can store the custom type of objects in Database.

Thanks for reading this blog, I hope this blog is helpful to you. If you have any query reading this blog or room database, You can ask in comments.

Stay coollll and updated :).

. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


13 comments

  • Abhijeet Hallur
    Hi Aman Gupta,

    Thanks for a neat explanation. I have a question though, what do we need to do if we have List inside the “OptionValues” class? Do we have to add TypeConverters for that list also?

    • Aman Gupta (Moderator)
      Yes, If you want to store OptionValues to the database proper table then you have to create the typeConverter for it.
  • Pabi
    Hey Aman Gupta,
    Awesome article, very helpful.
    • anchit (Moderator)
      Thanks for your appreciation.

      It is good to hear that our team could help you 🙂

      • Chaste
        Please how does this work with Moshi of Gson?
        • anchit (Moderator)
          I have not really worked with moshi.

          But i think, there are toJson() & fromJson() methods in moshi as well and that could realliy help you out for this.

  • k pradeep kumar reddy
    so the list field is stored as a jsonString in the DB right ??
    If i want to have a 1 to N relationship tables, then type converters are not the right choice correct ??
    may be then i should use @ForeignKey annotation or some other annotations like @Embedded or @Relation right ??
    • anchit (Moderator)
      Yes as per the article the field is stored as JSONString in the DB.

      Yes, absolutely you need to use different annotations and not the type converters for 1 to N relationship.

  • Biruk
    Hi,
    how can you access that list, add item to it, get that list in another activity and so on?
    • anchit (Moderator)
      You can simply get that list from the model.

      option.getOptionValues() –> this method will give you the list.

      If now you want to add any values to this list then you can do the same.

      But for passing that list to activity you can again use type converters and convert the list to json string and pass it, then in other activity, you can convert this string to list again using type converters.

      If still you want to use room as well inthis then you need to get the instance of the list from your model, update the list as per your need, save it in the Db (you need to make sure the updated value is saved) then in other activity get the updated list from the room model.

      Hope this helps you.

      • Rohitk
        Can you please show a way to add an item to the list of OptionsValue and delete the item from that list
  • Feroz Khan
    Thanks! After a lot of search over the internet and reading too many confusing articles, this one helped me.
  • Serhat
    Thanks a lot 🙂
  • css.php

    Great Product, Great Team, and Great Support Service. And if you want to add more features to the product, they can submit any idea that comes to your mind. They really care about their clients and we are really happy and honored to deal with Webkul.

    Osama
    Talk to Sales

    Global

    Live Chat
    Start a Project


      Message Sent!

      If you have more details or questions, you can reply to the received confirmation email.

      Back to Home