0

我正在我的 android 应用程序中尝试使用 odata4j 从可以从 WCF 服务访问的数据库中检索数据。

 ODataConsumer co = ODataConsumer.create("http://xxx.xx.xx.xxx:xxxx/Users");
 for(OEntity user : co.getEntities("Users").execute())
 {
      // do stuff
 }

但是,这会在调用 getEntities 时崩溃。我也尝试过各种其他调用,例如

 Enumerable<OEntity> eo = co.getEntities("Users").execute();            
 OEntity users = eo.elementAt(0);

然而,这也会在 eo.elementAt(0) 崩溃。

logcat 什么也没告诉我,调用堆栈似乎在 ActivityThread.performLaunchActivity 处暂停。

另一方面,在我的网络浏览器中输入“http://localhost:xxxx/Users”按预期工作,并以 xml 格式返回我的数据库中的用户。

关于如何调试它的任何想法?

4

3 回答 3

1

记录所有 http 请求/响应:

ODataConsumer.dump.all(true);

传递给消费者 .create 调用的 uri 应该是服务根。例如 .create("http://xxx.xx.xx.xxx:xxxx/"); 否则你的代码看起来不错。

请注意 Enumerable 的行为类似于 .net 类型 - 枚举被推迟到访问。如果您打算多次索引结果,我建议您先调用 .toList() 。

让我知道你发现了什么。

希望有帮助,
-约翰

于 2011-06-03T20:39:17.253 回答
0

我想电话应该是:

ODataConsumer co = ODataConsumer.create("http://xxx.xx.xx.xxx:xxxx");
for(OEntity user : co.getEntities("Users").execute())
{
     // do stuff
}

create定义您要连接的服务,但Users它是您要查询的资源。

于 2011-06-03T18:20:47.117 回答
0

你可以试试这个方法。

OEntity oEntity;     
         OQueryRequest<OEntity>  oQueryRequest=  oDataJerseyConsumer.getEntities(entityName);
         List<OEntity>  list=  oQueryRequest.execute().toList();

         for (OEntity o : list) {
                List<OProperty<?>> props = o.getProperties();
                for (OProperty<?> prop : props) {
                    System.out.println(prop.getValue().toString());

                }

        }
于 2013-04-05T12:48:09.447 回答