Android:以循环和返回值呼叫观察者



我是异步编程的新手问题是我仅收到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返回的类型是不可能的,请这样做。

最新更新