【问题标题】:db4o getting specific objects android javadb4o获取特定对象android java
【发布时间】:2013-05-22 11:19:25
【问题描述】:

我正在制作一个 android 项目并且没有太多 Java 经验。所以我现在能够将对象存储在 db4o 数据库中,我也可以检索所有对象。但是,如果我想获取特定项目的列表,则只有 1 个项目返回(即使还有更多)。

我会告诉你我的代码:

这是访问数据库的代码,应该可以工作。它是 db4oHelper 类中的一个函数

public ObjectContainer db() {

    Log.i(Db4oHelper.class.getName(), "Accessing Database...");

    if ((Db4oHelper.objectContainer == null) || ((Db4oHelper.objectContainer != null) && Db4oHelper.objectContainer.ext().isClosed())) {

        Toast.makeText(this.context, "Creating DB Config", Toast.LENGTH_SHORT).show();

        EmbeddedConfiguration c = Db4oEmbedded.newConfiguration();
        c.common().objectClass(Event.class).cascadeOnUpdate(true);
        c.common().objectClass(Event.class).cascadeOnActivate(true);
        c.common().allowVersionUpdates(true);
        c.common().detectSchemaChanges(true);
        c.common().messageLevel(2);

        Db4oHelper.objectContainer = Db4oEmbedded.openFile(c, db4oDBFullPath(this.context));

    }
    return Db4oHelper.objectContainer;
}

我还有一个 EventProvider 类,它扩展了 db4oHelper 类。编写代码以存储和获取对象的位置。这是即使有更多对象也只返回 1 个对象的函数。 (我是从 db4o 教程 pdf 的例子中制作的)

public List eventsFriday()
    {
        //function to get events by day (ex all events of friday)

        List <Event> events = db().query(new Predicate<Event>() {
             public boolean match(Event event) {
             return event.getDay().equals("friday");
             }
            });
        return events;
    }

所以现在我创建了获取星期五事件的函数,目前有 2 个。但它只返回 1。有人知道吗?

我也想让这个功能工作更多天,例如周五、周六和周日。但是如果我通过函数传递一个字符串,我就不能在新的谓词函数中使用它。

类似这样的:

public List eventsByDay(**String day**)
    {
        //function to get events by day (ex all events of friday)

        List <Event> events = db().query(new Predicate<Event>() {
             public boolean match(Event event) {
             return event.getDay().equals(**day**);
             }
            });
        return events;
    }

【问题讨论】:

  • ...获取星期五的事件,目前有 2 个。 你怎么知道的?

标签: java android db4o


【解决方案1】:

如果声明为 final,您可以使用 day

public List eventsByDay(final String day)
{
    //function to get events by day (ex all events of friday)

    List <Event> events = db().query(new Predicate<Event>() {
         public boolean match(Event event) {
             return event.getDay().equals(day);
         }
    });
    return events;
}

【讨论】:

  • 好的,这解决了我遇到的一个问题。现在只需要找到一种方法来获取多个事件(如果有的话)而不是只有 1 个
【解决方案2】:

好的,所以我一直在搜索和尝试很多,我发现了一些现在可以使用的东西。以后还得做进一步的测试。

 public List eventsByDayTest(final String day)
    {
        //function to get events by day (ex all events of friday)

        Query query=db().query();
        query.constrain(Event.class);
        query.descend("Day").constrain(day);
        ObjectSet result=query.execute();
        return result;
    }

然后我在 android 上的活动类中的 List 中捕获返回结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2011-04-23
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多