Sun
Sun

Reputation: 6888

Filter Records from SQLite to show in a List

I have some data in SQLite database, which I would like to show in a List based on small logic.

I have three fields in my table,

first field : id
second field : title
third field : type 

where Type can be : Monthly or Yearly

Here is my code:

    // Generate real data for each item
    public List<ReminderItem> generateData(int count) {
        ArrayList<ReminderItem> items = new ArrayList<>();

        // Get all reminders from the database
        List<Reminder> reminders = rb.getAllReminders();

        // Initialize lists
        List<String> Titles = new ArrayList<>();
        List<String> Type = new ArrayList<>();
        List<Integer> IDList= new ArrayList<>();

        // Add details of all reminders in their respective lists
        for (Reminder r : reminders) {
            Titles.add(r.getTitle());
            Type.add(r.getType());
            IDList.add(r.getID());
        }
        return items;
      }

This is the situation, where I need help from you guys, As you can see still, I am showing each and every record from database to list, no matter from which Type it belongs.

Now, I just want to show records in a List, which belongs to Type "Monthly" only

So exactly what I have to do ? How can I show records in a List for the Type of "Monthly" only

I have a String variable namely, strType = "Monthly";

Upvotes: 0

Views: 176

Answers (2)

Jaldeep Asodariya
Jaldeep Asodariya

Reputation: 280

You have two option to do this.

First is directly get only those record from database which reminder type is "Monthly" by execute below sql statement.

SELECT id,title,type FROM table_name WHERE type = "Monthly"

Second is check reminder type is equal to "Monthly" when you add data into List.

for (Reminder r : reminders) {

        String reminderType = r.getType();
        if(reminderType.equalsIgnoreCase(strType)) {

            Titles.add(r.getTitle());
            Type.add(reminderType);
            IDList.add(r.getID());
        }
    }

Full Code

// Generate real data for each item
public List<ReminderItem> generateData(int count) {

    String strType = "Monthly";

    ArrayList<ReminderItem> items = new ArrayList<>();

    // Get all reminders from the database
    List<Reminder> reminders = rb.getAllReminders();

    // Initialize lists
    List<String> Titles = new ArrayList<>();
    List<String> Type = new ArrayList<>();
    List<Integer> IDList= new ArrayList<>();

    // Add details of all reminders which type="Monthly" in their respective lists
    for (Reminder r : reminders) {

        String reminderType = r.getType();
        if(reminderType.equalsIgnoreCase(strType)) {

            Titles.add(r.getTitle());
            Type.add(reminderType);
            IDList.add(r.getID());
        }
    }
    return items;
}

Upvotes: 4

Vasil Valchev
Vasil Valchev

Reputation: 5819

When you select from your sqlite db you can add filter there

Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_A + " WHERE " + 
COLUMN_TYPE + "=?", new String[]{ arg0 }); // arg0 = "Monthly"

This will increase your performance instead of filtering List after load

Upvotes: 0

Related Questions