How to create an array list inside a realm object for todo app?

1.5k Views Asked by At

I want to develop todo app with the realm database. I have successfully created a list and displayed in recycler view. but when I try to add task inside the recycler view item. I'm a little bit confused. I don't know how to achieve this.

for example:

this is my POJO class

import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;

public class ShoppingModel extends RealmObject {

    @PrimaryKey
    private int id;
    private String title;
    private String items;
    private String color;
    private String date;
    private String  time;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getItems() {
        return items;
    }

    public void setItems(String items) {
        this.items = items;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}

This is my realm helper class

import android.util.Log;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmList;
import io.realm.RealmResults;

public class RealmHelper {

    Realm realm;

    public RealmHelper(Realm realm){

        this.realm = realm;
    }


    //save data to  realm
    public void save(final ShoppingModel shoppingModel){

        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                if (realm!=null){

                    Log.e("Log", "Database was created  " );

                    Number currentID = realm.where(ShoppingModel.class).max("id");
                    int nextId;
                    if (currentID == null){

                        nextId=1;

                    } else {
                        nextId = currentID.intValue() + 1;
                    }

                    shoppingModel.setId(nextId);

                    ShoppingModel s = realm.copyToRealm(shoppingModel);
                } else {
                    Log.e("Log", "Database not exits " );
                }
            }
        });
    }


    public List<ShoppingModel> getAllShoppingList(){

        RealmResults<ShoppingModel> shopResult = realm.where(ShoppingModel.class).findAll();

        return shopResult;
    }


    //update data to realm

    public void update(final int id, final String title, final String items, final String color, final String date, final String time){

        realm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {

                ShoppingModel shoppingModel = realm.where(ShoppingModel.class).equalTo("id",id)
                        .findFirst();

                shoppingModel.setTitle(title);
                shoppingModel.setItems(items);
                shoppingModel.setTime(time);
                shoppingModel.setDate(date);
                shoppingModel.setColor(color);

            }
        }, new Realm.Transaction.OnSuccess(){


            @Override
            public void onSuccess() {

            }
        }, new Realm.Transaction.OnError(){

            @Override
            public void onError(Throwable error) {

                error.printStackTrace();
            }
        });
    }


    // delete from realm

    public void delete(final int id, final String title, final String items, final String color, final String date, final String time){

        realm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {

                ShoppingModel shoppingModel = realm.where(ShoppingModel.class).equalTo("id",id)
                        .findFirst();

                shoppingModel.setTitle(title);
                shoppingModel.setItems(items);
                shoppingModel.setTime(time);
                shoppingModel.setDate(date);
                shoppingModel.setColor(color);

                shoppingModel.deleteFromRealm();
                realm.commitTransaction();

            }
        }, new Realm.Transaction.OnSuccess(){


            @Override
            public void onSuccess() {

            }
        }, new Realm.Transaction.OnError(){

            @Override
            public void onError(Throwable error) {

                error.printStackTrace();
            }
        });
    }

}

Here's my output

My output like this

Now I want to click that item inside that item i want to add task with checkbox

for example like this

I want to achieve like this

1

There are 1 best solutions below

1
On

Both List and ShoppingModel cannot be stored in Realm directly. You will need to create a model object for ShoppingModel and then use a RealmList object containing your model objects.

public class ShoppingModel extends RealmObject {
    public ShoppingModel() { }
    @PrimaryKey
    private int id;
    private String title;
    private String items;
    private String color;
    private String date;
    private String  time;

    RealmList<ShoppingModelDetails> shoppingListDetails = new RealmList<ShoppingModelDetails>();

    // getter setters are here.
}

ShoppingModelDetails class is here -

public class ShoppingModelDetails extends RealmObject {
        public ShoppingModelDetails() { }
        @PrimaryKey
        private int id;
        private String title;
        private String items;
        private String color;
        private String date;
        private String  time;

        // getter setters are here.
    }

//Add shopping model details objects to shoppingListDetails and store it in your ShoppingList object You will need to manually convert objects of the ShoppingModelDetails class to the ShoppingModel class when you are inserting/retrieving from the database.