0

我正在制作一个 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;
    }
4

2 回答 2

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;
}
于 2013-05-22T13:26:22.153 回答
0

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

 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 中捕获返回结果。

于 2013-05-22T15:03:14.617 回答