【发布时间】:2015-10-18 18:48:37
【问题描述】:
NdJson 数据示例:
{"type":"data","id":"xyz"}
{"type":"value","id":"xcf"}
....
....
这是我的 Retrofit 和 RxJava 代码,可以正常使用 limit=1 即 {"type":"data","id":"xyz"} 获取数据。
adapter.create(API.class).getData()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<APIData>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(APIData apidata) {}
});
我的模型课
模型类只有两个参数:
public class APIData(){
private String type;
private String id;
..// Getter and setter for above two fields
}
API 类
public interface WarehouseAPI {
@GET("/search?limit=1")
public Observable<APIData> getdata ();
}
将@GET("/search?limit=1") 替换为@GET("/search") 时遇到的错误是Malformed JSON: Syntax error。
问题
如何正确解析NdJson?
有没有办法将响应存储在List<APIData>
编辑-1
现在我正在尝试在观察者中接受通用 Response:
adapter.create(APIData.class).getdata()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Response>() {
@Override
public void onCompleted() {}
@Override
public void onNext(Response response) {}
});
但是得到no suitable method found for subscribe(<anonymous Observer<Response>>)
编辑-2
但是,我犯了一些愚蠢的错误,我在“Edit-1”部分遇到的错误现在已修复。现在我得到了
Error:retrofit.RetrofitError: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 2 column 2 path $
【问题讨论】:
-
为什么 type 和 id 是静态的?你可以重新发布模型吗?
-
@Blackbelt 我编辑了问题
-
接收 json 作为字符串怎么样。将其拆分为 response.split("\n") 之类的数组。只需遍历它并使用 gson 创建新对象?
-
@ProblemSlover 想象一下,我在一个响应中确实有 2000 个分隔符。运行循环会很耗时(这是我需要在 android 中显示的第一个活动)
-
我会得到一个
Response,然后将其拆分为\n,然后使用平面图将每个APIData作为流的一个事件
标签: java android json gson retrofit