getEntity调用导致崩溃(在WCF服务上使用odata4j)

问题描述:

我正在尝试odata4j在我的android应用程序中检索可从WCF服务访问的数据库中的数据。getEntity调用导致崩溃(在WCF服务上使用odata4j)

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格式返回我的数据库中的用户。

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

我想调用应该是:

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

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

+0

啊傻我 - 是的,我最初尝试过。我已经从创建的通话中删除了“用户”,但它仍然挂在getEntities :( – 2011-06-03 18:42:33

+0

只需首先检查 - 您的Android应用程序是否可以访问该地址?否则,您可以使用Fiddler之类的东西,并比较来自浏览器的请求和来自android的请求? – 2011-06-03 18:46:29

+0

是的,如果我使用HttpGet代替,我的Android可以访问地址。不幸的是,当我跨越getEntities循环时,Fiddler不会显示任何新项目。 – 2011-06-03 18:53:46

要记录所有的HTTP请求/响应:

ODataConsumer.dump.all(true); 

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

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

让我知道你发现了什么。

希望帮助,
约翰 -

+0

感谢您的提示。在ODataConsumer.dump.all(true)之后,所有http请求\响应都会被记录到哪里? 是的我修改了我的创建方法的网址,但它仍然崩溃:( – 2011-06-03 21:15:33

你可以试试这个方法。

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()); 

       } 

     }