2012-04-10 1 views
0

Я экспериментирую с ORMLite для Android.Ormlite поля отображения для простого класса-члена

У меня есть предварительно построенный SQLite db, который я загружаю на устройство Android. Я хранить информацию о местоположении, как LocationX, LocationY колонки:

CREATE TABLE graphicsinstances(Name STRING , LocationX FLOAT , LocationY FLOAT , SizeX FLOAT , SizeY FLOAT); 

Загвоздка, во время выполнения я хотел бы, чтобы это выглядеть примерно так:

public class Vector2 
{ 
    public float X; 
    public float Y; 
} 
@DatabaseTable(tableName = "graphicsinstances") 
public class graphicsinstance 
{ 
    public GraphicalEntityInstance() 
    { 
     mName    = null; 
     mPosition   = Vector2.zero(); 
     mSize    = Vector2.zero(); 
    } 
    @DatabaseField(columnName = "Name", canBeNull = false) 
    public String mName; 

    //Olympic standard optimism 
    //@DatabaseField(columnName = "Location", canBeNull = false) 
    //public Vector2 mPosition; 

    // current (unsatisfactory) method: 
    @DatabaseField(canBeNull = false, useGetSet=true) 
    private float LocationX; 
    public float getLocationX() { return mPosition.X;} 
    public void setLocationX(float x) { mPosition.X = x;} 
    // repeat for Y, SizeX & SizeY! 
} 

я упустил что-то очевидное, или я полностью лай Неправильное дерево? может ли кто-нибудь предложить альтернативный/более красивый метод?

+0

Непонятный вопрос. У вас проблемы с этим? Не компилируется и не выполняется? Какие ошибки вы получаете? – Gray

+0

Извините, я хочу сопоставить данные в столбцах LocationX и LocationY с полями X и Y экземпляра mPosition. Мое обходное решение с использованием механизма getet работает, но оно вводит неиспользуемую переменную-член и выглядит достаточно противно, чтобы заставить меня думать, что это происходит совсем не так: -/ – user1323843

ответ

0

Если я понимаю, вы хотите сопоставить таблицу с классом с подклассами. В вашем примере, я думаю, вы хотите загрузить поляи LocationY в mposition, которые, я думаю, Vector2?

Я думаю, что это нормально, чтобы иметь getMPosition() и setMPosition(mpos) методы, которые делают отображение между LocationX и LocationY полей, но вы не собираетесь быть в состоянии сделать это отображение авто-магически с ORMLite.


С точки зрения чистоты, я всегда рекомендую использовать то, что круги баз данных называют «классом сущностей». Этот класс точно отражает структуру вашей базы данных. Он должен иметь взаимно однозначное соответствие между полями в таблице и классе. Он может иметь такие методы, как hashCode(), equals(), и стандартные геттер/сеттеры, но совсем немного.

Вы можете создать объект-обертку, который принимает объект GraphicsInstance в своем конструкторе и отображает Vector2 и позволяет выполнять другие операции. Когда вы будете готовы продолжать его, когда вам нужно будет вернуться к объекту GraphicsInstance.

+0

Да, это определенно похоже на лучшее решение. Я попробую это;) Спасибо за ваши быстрые ответы! – user1323843

Смежные вопросы