gpt4 book ai didi

Android:在for循环中调用Observer并返回值

转载 作者:行者123 更新时间:2023-11-30 00:33:43 25 4
gpt4 key购买 nike

我是异步编程的新手。我正在读取 Json 数组中的所有数据库数据,然后在观察者中迭代它,我从那里调用另一个观察者将数据发布到服务器。但问题是我只收到第一个值json 数组,然后终止。 Rx java 中有什么东西可以处理这个东西吗?我想从 json 数组一个一个地向服务器发送值。我应该使用 flatmapiterable 将数据返回给 serverpost 观察者吗?还是我应该使用其他技术?

这是我的代码:

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 返回的类型不是 Iterable,就让它成为 Iterable。

关于Android:在for循环中调用Observer并返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43781323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com