我正在使用Retrofit和SimpleXML来解析来自某些公共API的XML响应.我一直在很好地处理所有内容,直到我偶然发现包含自由文本和子标记的XML标记 - 如以下示例所示:
<a>
Some free-style text
<b>Even more text!</b>
</a>
Run Code Online (Sandbox Code Playgroud)
为了尝试使用Simple-XML注释进行反序列化,我已经采用了两种方式.请记住,基本上'a'是一个条目标签列表:
@ElementList(entry = "a", inline = true, required = false) List<A> aList;
Run Code Online (Sandbox Code Playgroud)
'A'定义如下:
public static class A {
@Text(required = false) protected String a;
}
Run Code Online (Sandbox Code Playgroud)
这很好地读取了自由文本部分,但是任何反序列化'b'标记内容的尝试(例如通过将@Elementw或o @Path注释成员添加到类'A')都失败了.我查看了SimpleXML文档,显然使用时存在以下限制@Text:
管理Text注释使用的规则是每个模式类只能有一个.此外,此注释不能与Element注释一起使用.只有属性注释可以与它一起使用,因为此注释不会在拥有元素中添加任何内容.
@ElementList(entry = "a", inline = true, required = false) List<String> aList;
Run Code Online (Sandbox Code Playgroud)
再一次,"a"标签的内容得到了正确的反序列化,但是没有办法找到"b"子标签的内容.
如何使用与JAVA对象相关的纯Simple-XML注释,使用关联的'b'子标签对'a'标签的内容进行反序列化?
我正在尝试在我的 android 应用程序中使用RxJava(版本 1.1.0)。我已经实现了一个简单的 observable/subscriber 模式来通过网络调用 API 调用,就像这样(使用“单一”而不是完全成熟的“可观察”只是因为没有多个事件报告网络调用):
// Observable
Single<Data> observable = Single.create(new Single.OnSubscribe<Data>() {
@Override
public void call(SingleSubscriber<? super Data> singleSubscriber) {
try {
Response<Data> response = mApi.get();
singleSubscriber.onSuccess(response.body());
} catch (Exception e) {
singleSubscriber.onError(e);
}
}
}).subscribeOn(Schedulers.io());
// Subscription
observable
.doOnSuccess(new Action1<Data>() {
@Override
public void call(Data data) {
Log.d("DBG", "success!");
}
})
.doOnError(new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
Log.d("DBG", "error!");
}
})
.subscribe();
Run Code Online (Sandbox Code Playgroud)
正常流程运行良好 - 我看到“成功”日志并收到数据。但是,当发生错误(例如 wifi 已关闭)时,即使处理了错误(报告了“错误!”日志),应用程序也会崩溃,但出现以下异常(已删除):
12-16 …Run Code Online (Sandbox Code Playgroud)