Android:Call for 循环中的观察者和返回值
Android:Call Observer in a for loop and returning values
我对异步很陌生 programming.I 我正在读取 Json 数组中的所有数据库数据,然后在观察者中迭代它,从那里我调用另一个观察者到 post 数据server.But 问题是我只收到 json 数组的第一个值,然后它终止。 Rx java 中是否有任何东西可以处理这个东西?我想从 json 数组将值一个一个地发送到服务器。我应该使用 flatmapiterable 来 return 数据到服务器 post 观察者吗?还是我应该使用其他技术?
这是我的代码:
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 return 成为真正的真实解析对象。
- 将 datamaker 的东西提取到一个方法中,或者如果它被使用了足够多次,作为 datamaker 上的静态方法。
- 如果
getJsonArray
returns 的类型不是 Iterable,就让它成为 Iterable。
我对异步很陌生 programming.I 我正在读取 Json 数组中的所有数据库数据,然后在观察者中迭代它,从那里我调用另一个观察者到 post 数据server.But 问题是我只收到 json 数组的第一个值,然后它终止。 Rx java 中是否有任何东西可以处理这个东西?我想从 json 数组将值一个一个地发送到服务器。我应该使用 flatmapiterable 来 return 数据到服务器 post 观察者吗?还是我应该使用其他技术?
这是我的代码:
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 return 成为真正的真实解析对象。
- 将 datamaker 的东西提取到一个方法中,或者如果它被使用了足够多次,作为 datamaker 上的静态方法。
- 如果
getJsonArray
returns 的类型不是 Iterable,就让它成为 Iterable。