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
是你要查询的资源服务。
要记录所有的HTTP请求/响应:
ODataConsumer.dump.all(true);
的URI传递给消费者.create调用应该是服务的根。例如.create( “http://xxx.xx.xx.xxx:xxxx/”);否则你的代码看起来很好。
请注意Enumerable的行为类似.net类型 - 枚举被推迟到访问。如果你计划在结果中多次索引,我建议你先调用.toList()。
让我知道你发现了什么。
希望帮助,
约翰 -
感谢您的提示。在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());
}
}
啊傻我 - 是的,我最初尝试过。我已经从创建的通话中删除了“用户”,但它仍然挂在getEntities :( – 2011-06-03 18:42:33
只需首先检查 - 您的Android应用程序是否可以访问该地址?否则,您可以使用Fiddler之类的东西,并比较来自浏览器的请求和来自android的请求? – 2011-06-03 18:46:29
是的,如果我使用HttpGet代替,我的Android可以访问地址。不幸的是,当我跨越getEntities循环时,Fiddler不会显示任何新项目。 – 2011-06-03 18:53:46