我是异步编程的新手问题是我仅收到JSON数组的首个值,然后终止。RX Java中是否存在任何处理此操作的东西?。我应该使用FlatMapiterable将数据返回到ServerPost Observer?还是我应该使用其他技术?
这是我的代码:
return getdatafromDb().flatMap(new Func1<String, Observable<String>>() {
public Observable<String> call(String data) {
try {
JSONArray jsonarray = new JSONObject(data).getJSONArray("sql_data");
for (int i = 0; i < jsonarray.length(); i++) {
datamaker.money = (Double) jsonarray.getJSONObject(i).get("money");
datamaker.income = (Double) jsonarray.getJSONObject(i).get("income");
datamaker.tag = (String) jsonarray.getJSONObject(i).get("tag");
return serverpost(datamaker); //this calls another observer to post data to server
}
} catch (JSONException e) {
e.printStackTrace();
}
return nothing;
}
});
道歉,因为这在Java 8:
中return getdatafromDb()
.flatMapIterable(data -> new JSONObject(data).getJSONArray("sql_data"))
.cast(JSONObject.class)
.map(o -> {
DataMaker datamaker = new DataMaker(); // whatever, but use new instance
datamaker.money = (Double) o.get("money");
datamaker.income = (Double) o.get("income");
datamaker.tag = (String) o.get("tag");
return datamaker;
})
.flatMap(datamaker -> serverpost(datamaker));
一些建议:
- 而不是一直手动解析JSON对象,而是让GetDataFromDB返回一个实际的诚实到神的解析对象。
- 将Datamaker的东西提取到一种方法中,或者如果使用足够的时间,则作为datamaker上的静态方法。
- 如果
getJsonArray
返回的类型是不可能的,请这样做。