Как динамически заполнить AnyChart из значений базы данных в android? - PullRequest
0 голосов
/ 02 марта 2020

Я ищу способы создания линейной диаграммы с использованием библиотеки AnyChart в android. Значения поступают динамически через мою ссылку API (в формате json). Я пробовал много раз, но не смог этого сделать. Некоторая помощь будет оценена. Спасибо.

Код следующий:

 try {
                            JSONObject jsonObject = new JSONObject(response);
                            String success = jsonObject.getString("status");
                            String cdata = jsonObject.getString("chart_data"); // for extra condition
                            final JSONArray jsonArray1 = jsonObject.getJSONArray("chart_data");
                            if (success.equals("true") && !cdata.equals(null)) {
                                for (int i = 0; i < jsonArray1.length(); i++) {
                                    JSONObject object1 = jsonArray1.getJSONObject(i);


                                    String devinfo = object1.getString("Device Info");
                                    dev[i] = object1.getString("Device Info");
                                    String value = object1.getString("Value");

                                  // chart AnyChart
                                    Cartesian cartesian = AnyChart.line();
                                    cartesian.animation(false);
                                    cartesian.padding(10d, 20d, 5d, 20d);
                                    cartesian.crosshair().enabled(true);
                                    cartesian.crosshair()
                                            .yLabel(true)
                                            // TODO ystroke
                                            .yStroke((Stroke) null, null, null, (String) null, (String) null);
                                    cartesian.tooltip().positionMode(TooltipPositionMode.POINT);
//                                    cartesian.title("Trend of Sales of the Most Popular Products of ACME Corp.");
//                                    cartesian.yAxis(0).title("Number of Bottles Sold (thousands)");
                                    cartesian.xAxis(0).labels().padding(1d, 1d, 1d, 1d);
                                    List<DataEntry> seriesData = new ArrayList<>();
                                    seriesData.add(new CustomDataEntry(dev[i], Integer.parseInt(value)));

                                    Set set = Set.instantiate();
                                    set.data(seriesData);
                                    Mapping series1Mapping = set.mapAs("{ x: 'x', value: 'value' }");
//                                    Mapping series2Mapping = set.mapAs("{ x: 'x', value: 'value2' }");
//                                    Mapping series3Mapping = set.mapAs("{ x: 'x', value: 'value3' }");

                                    Line series1 = cartesian.line(series1Mapping);
                                    series1.name("Brand");
                                    series1.hovered().markers().enabled(true);
                                    series1.hovered().markers()
                                            .type(MarkerType.SQUARE)
                                            .size(4d);
                                    series1.tooltip()
                                            .position("right")
                                            .anchor(Anchor.RIGHT_CENTER)
                                            .offsetX(5d)
                                            .offsetY(5d);

                                    cartesian.legend().enabled(true);
                                    cartesian.legend().fontSize(13d);
                                    cartesian.legend().padding(0d, 0d, 10d, 0d);
                                    anyChartView.setChart(cartesian);

                                }
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

1 Ответ

0 голосов
/ 03 марта 2020

В своем коде вы воссоздаете диаграмму, серию, список DataEntries и настраиваете диаграмму для каждой точки. Чтобы правильно создать диаграмму и применить данные из БД, вы должны выполнить следующие шаги в следующем порядке:

  1. Создать список DataEntries только один раз
  2. Синтаксически JSON для DataEntry в al oop (так же, как и вы, но список должен быть создан до l oop только один раз)
  3. Создать набор, как вы это сделали, применить список DataEntries к набору
  4. Создать график, серию, настроить его (только один раз)
...