小编d4v*_*idi的帖子

使用Retrofit反序列化带有文本和子标签的XML标记

我正在使用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'标签的内容进行反序列化?

java xml android simple-framework retrofit

3
推荐指数
1
解决办法
1215
查看次数

尽管处理了错误,但由于可观察到的错误而导致 RxJava 崩溃

我正在尝试在我的 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)

crash android rx-java

2
推荐指数
1
解决办法
2994
查看次数

标签 统计

android ×2

crash ×1

java ×1

retrofit ×1

rx-java ×1

simple-framework ×1

xml ×1