Shah
Shah

Reputation: 92

Best Way to Create Room Database Object

I am New to Room Persistence Library in Android. I have looked into a lot of tutorials related to Room. But something is unclear about it.

I can relate my questions to the below response. If we use @Embedded in "Info", Is it possible to declare info POJO class as separate entity? because inside info I have another object called "preferences". How can I embed that to my Room Database ?

Next is How can I use Awb ArrayList in below sample for Type converters? Note that inside Awb ArrayList has one more "terms" array inside.

I would appreciate if some can show and explain to me the best way to Create Room from the below sample data. I know so many tutorials are there for simple JSON structure, but I didn't find any examples with nested JsonObjects.

{
    "hashCode": 10461,
    "jobs": [
        {
            "info": {
                "jobDesc": "aaaaa",
                 "signatureRequired": "true”
                "preferences": {
                    "podRequired": 0,
                    "eligableForCcod": false,
                    "signatureRequired": 1
                }
            },
            "awb": [
                {
                    "terms": [
                        {
                            "termValue": "INR1500.000",
                            "termType": "CASH_AMOUNT"
                        },
                        {
                            "termValue": "CTLDk",
                            "termType": "CX_EN"
                        }
                    ],
                    "packagesCount": 1,
                    "accountId": "AE _MP",
                    "awb": "1234567878440"
                }
            ]
        }
    ]
}

Upvotes: 2

Views: 940

Answers (2)

Nicola Gallazzi
Nicola Gallazzi

Reputation: 8723

I don't know if this is the best possible approach, but normally when I have complex objects in Room I define a converter class containing two TypeConverters. The first one converts from the structured object (your POJO class) to a String with GSON library, something like:

@TypeConverter
    public String fromPojoToString(MyPojoClass info) {
        if (info == null) {
            return (null);
        }
        Gson gson = new Gson();
        Type type = new TypeToken<MyPojoClass>() {

        }.getType();
        return gson.toJson(info, type);
    }

The second converter converts from the string (stored inside Room) to the structured object (the POJO class). Something like:

@TypeConverter
    public MyPojoClass fromStringtoPojo(String object) {
        if (object == null) {
            return (null);
        }
        Gson gson = new Gson();
        Type type = new TypeToken<MyPojoClass>() {
        }.getType();
        return gson.fromJson(info, type);
    }

This way you'll be able to serialize/deserialize your POJO class without writing a lot of boilerplate. Obviously, you have to annotate your AppDatabase class (the one that extends RoomDatabase) with your Converter using @TypeConverters annotation. There is a good article about this approach here https://medium.com/@toddcookevt/android-room-storing-lists-of-objects-766cca57e3f9.

Hope that this helps, best luck!

Upvotes: 2

Related Questions