我在我的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没有告诉我任何内容,并且callstack似乎在ActivityThread.performLaunchActivity中被暂停。
另一方面,在我的网络浏览器中输入“http:// localhost:xxxx / Users”按预期工作,并以xml格式返回我的数据库中的用户。
关于我如何调试这个的任何想法?
答案 0 :(得分:1)
记录所有http请求/响应:
ODataConsumer.dump.all(true);
uri传递给消费者.create调用应该是服务根。例如.create( “http://xxx.xx.xx.xxx:xxxx/”);否则你的代码看起来很好。
请注意,Enumerable的行为类似于.net类型 - 枚举在访问之前会延迟。如果您打算多次索引到结果中,我建议您首先调用.toList()。
让我知道你发现了什么。
希望有所帮助,
- 约翰
答案 1 :(得分:0)
我猜电话应该是:
ODataConsumer co = ODataConsumer.create("http://xxx.xx.xx.xxx:xxxx");
for(OEntity user : co.getEntities("Users").execute())
{
// do stuff
}
create
定义您要连接的服务,但Users
是您要查询的资源。
答案 2 :(得分: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());
}
}