Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ActiveAndroid abstract class table

Does anyone know if it is possible to create a table for an abstract class in ActiveAndroid. For example i could have an abstract class Animal with two concrete classes Dog and Cat. I want to be able to do something like:

List<Animal> animals = new Select().from(Animals.class).execute();

which would result in 'animals' containing all of the saved Cats and Dogs. Or:

Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle();

Where 'animal' could be either a Cat or a Dog. Unfortunately when I do this I get an exception because no table is created for the abstract class Animal. Does anyone know how I might go about this using ActiveAndroid?

like image 610
user3265561 Avatar asked Jun 30 '15 11:06

user3265561


1 Answers

Unfortunately ActiveAndroid does not support inheritance of models in that way just yet (https://github.com/pardom/ActiveAndroid/issues/14, https://github.com/pardom/ActiveAndroid/issues/257).

If you wanted to modify ActiveAndroid here's what you could do:

  • Create some kind of annotation that allows you define a model (Animals) as something that isn't persisted (refer to com.activeandroid.annotation.Table).
  • Upon trying to executing queries for that class you could use reflection to determine its child classes and then have it perform that query per child class.
  • Then you would basically take the list of results for each query and combine them into a single list and return that.

To be honest I've never seen inheritance in any Android ORM libraries, and personally I don't think it's a good design pattern for models. You may want to reconsider your reasoning for going down this path.

like image 154
Nyx Avatar answered Nov 12 '22 00:11

Nyx