Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generic parameterized collection in foreign field #19

Closed
filsh opened this issue Aug 29, 2014 · 1 comment
Closed

Generic parameterized collection in foreign field #19

filsh opened this issue Aug 29, 2014 · 1 comment
Labels

Comments

@filsh
Copy link

filsh commented Aug 29, 2014

Hi, I use this library with robospice.
How use generic parameter for this code?

my profile

@Contract
@DatabaseTable(tableName = ProfileContract.TABLE_NAME)
@AdditionalAnnotation.DefaultContentUri(authority = ProfileContract.AUTHORITY, path = ProfileContract.CONTENT_URI_PATH)
public class Profile extends Model {
    @DatabaseField(canBeNull = false, columnName = ProfileContract.Columns.ID)
    @SerializedName(Constants.ATTR.PROFILE.ID)
    public int id;

    @DatabaseField(canBeNull = false, foreign = true, foreignAutoRefresh = true, foreignAutoCreate = true, columnName = ProfileContract.Columns.LIST_PHOTOS_ID)
    @SerializedName(Constants.ATTR.PROFILE.PHOTOS)
    public ListItems<Photo> photos;

    @DatabaseField(columnName = Constants.Columns._ID, generatedId = true)
    private int _id;
}

my ListItems

@Contract
@DatabaseTable(tableName = ListItemsContract.TABLE_NAME)
@AdditionalAnnotation.DefaultContentUri(authority = ListItemsContract.AUTHORITY, path = ListItemsContract.CONTENT_URI_PATH)
public class ListItems<T> implements Serializable {

    @DatabaseField(canBeNull = false, columnName = ListItemsContract.Columns.COUNT)
    @SerializedName(Constants.ATTR.LIST.COUNT)
    public int count;

    @DatabaseField(canBeNull = false, columnName = ListItemsContract.Columns.SUMMARY)
    @SerializedName(Constants.ATTR.LIST.SUMMARY)
    public String summary;

    @ForeignCollectionField(eager = true)
    @SerializedName(Constants.ATTR.LIST.ITEMS)
    public Collection<T> items;

    @DatabaseField(columnName = Constants.Columns._ID, generatedId = true)
    private int _id;
}

and my Photo

@Contract
@DatabaseTable(tableName = PhotoContract.TABLE_NAME)
@AdditionalAnnotation.DefaultContentUri(authority = PhotoContract.AUTHORITY, path = PhotoContract.CONTENT_URI_PATH)
public class Photo extends Model {

    @DatabaseField(columnName = PhotoContract.Columns.PREFIX, canBeNull = false)
    @SerializedName(Constants.ATTR.PHOTO.PREFIX)
    public String prefix;

    @DatabaseField(columnName = PhotoContract.Columns.SUFFIX, canBeNull = false)
    @SerializedName(Constants.ATTR.PHOTO.SUFFIX)
    public String suffix;

    @DatabaseField(columnName = Constants.Columns._ID, generatedId = true)
    private int _id;

    @DatabaseField(columnName = PhotoContract.Columns.LIST_ITEMS_ID, foreign = true)
    private ListItems listItems;
}

and I have this error exeption

java.sql.SQLException: Field class for 'items' must be a parameterized Collection whose generic argument is an entity class not: T
            at com.j256.ormlite.field.FieldType.configDaoInformation(FieldType.java:371)
            at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:201)
            at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:128)
            at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:119)
            at com.j256.ormlite.dao.BaseDaoImpl$5.<init>(BaseDaoImpl.java:921)
            at com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:921)
            at com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:72)
            at com.j256.ormlite.table.TableUtils.createTable(TableUtils.java:218)
            at com.j256.ormlite.table.TableUtils.createTableIfNotExists(TableUtils.java:61)
            at com.octo.android.robospice.persistence.ormlite.InDatabaseObjectPersisterFactory.createTableIfNotExists(InDatabaseObjectPersisterFactory.java:48)
            at com.octo.android.robospice.persistence.ormlite.InDatabaseObjectPersisterFactory.initializeTablesIfNeeded(InDatabaseObjectPersisterFactory.java:60)
            at com.octo.android.robospice.persistence.ormlite.InDatabaseObjectPersisterFactory.createObjectPersister(InDatabaseObjectPersisterFactory.java:37)
            at com.octo.android.robospice.persistence.CacheManager.getObjectPersister(CacheManager.java:183)
            at com.octo.android.robospice.persistence.CacheManager.saveDataToCacheAndReturnData(CacheManager.java:76)
            at com.octo.android.robospice.request.DefaultRequestRunner.saveDataToCacheAndReturnData(DefaultRequestRunner.java:266)
            at com.octo.android.robospice.request.DefaultRequestRunner.processRequest(DefaultRequestRunner.java:173)
            at com.octo.android.robospice.request.DefaultRequestRunner$1.run(DefaultRequestRunner.java:217)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:841)

may be you have other ideas?

@jakenjarvis
Copy link
Owner

Hmmm. Did you look at the stack trace?
I saw only the stack trace. Namespace OrmLiteContentProvider is com.tojc.ormlite.android.
OrmLiteContentProvider does not seem to have been used here...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants