Hier ist mein Problem. Ich versuche, ein Diagramm aus Daten zu erstellen, die ich von der API herunterlade. Um Daten herunterzuladen, verwende ich OTTO
und Retrofit
Bibliothek. Für die Zeichnung verwende ich MPAndroidChart
. In MagnitudeFrequencyChart
Ich bereite Daten vor, um auf Diagramm zu verursachen. Wenn ich heruntergeladene Daten in einen Konstruktor implementiere und eine Diagrammmethode in onServerEvent
erstelle, bekomme ich Informationen, dass mein Diagramm keine Daten zur Verfügung hat. Ist es möglich, barChart außerhalb OnCreateView
Methode zu erstellen? Oder wie kann ich meine heruntergeladenen Daten in OnCreateView
implementieren?Zeichnung barChart von heruntergeladenen Daten
public class GraphFragment extends Fragment {
private View view;
private BarChart barChart;
private Bus bus = BusProvider.getInstance();
private MagnitudeFrequencyChart magnitudeFrequencyChart;
private List<Feature> features;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_graph, container, false);
barChart = (BarChart) view.findViewById(R.id.barChart_magnitudeFrequency);
return view;
}
@Subscribe
public void onServerEvent(ServerEvent serverEvent) {
features = serverEvent.getDataResponse().getFeatures();
magnitudeFrequencyChart = new MagnitudeFrequencyChart(features, barChart);
magnitudeFrequencyChart.getMagnitudeFrequencyChart();
}
@Subscribe
public void onErrorEvent(ErrorEvent errorEvent) {
Toast.makeText(getActivity(), "" + errorEvent.getErrorMsg(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResume() {
super.onResume();
bus.register(this);
}
@Override
public void onPause() {
super.onPause();
bus.unregister(this);
}
}
Klasse, wo ich die Erstellung eines Diagramms:
public class MagnitudeFrequencyChart {
private List<Feature> features;
private BarChart barChart;
public MagnitudeFrequencyChart(List<Feature> features, BarChart barChart) {
this.features = features;
this.barChart = barChart;
}
public void getMagnitudeFrequencyChart() {
int mag3 = 0;
int mag4 = 0;
int mag5 = 0;
int mag6 = 0;
int mag7 = 0;
int mag8 = 0;
int mag9 = 0;
for (int i = 0; i < features.size(); i++) {
double magnitude = features.get(i).getProperties().getMag();
if (magnitude >= 3 && magnitude <= 3.99) {
mag3++;
} else if (magnitude >= 4 && magnitude <= 4.99) {
mag4++;
} else if (magnitude >= 5 && magnitude <= 5.99) {
mag5++;
} else if (magnitude >= 6 && magnitude <= 6.99) {
mag6++;
} else if (magnitude >= 7 && magnitude <= 7.99) {
mag7++;
} else if (magnitude >= 8 && magnitude <= 8.99) {
mag8++;
} else if (magnitude >= 9 && magnitude <= 9.99) {
mag9++;
}
}
ArrayList<BarEntry> yData = new ArrayList<>();
yData.add(new BarEntry(mag4, 0));
yData.add(new BarEntry(mag5, 1));
yData.add(new BarEntry(mag6, 2));
yData.add(new BarEntry(mag7, 3));
yData.add(new BarEntry(mag8, 4));
yData.add(new BarEntry(mag9, 5));
String xValues[] = {"4.0+", "5.0+", "6.0+", "7.0+", "8.0+", "9.0+"};
ArrayList<String> xData = new ArrayList<>();
for (int i = 0; i < xValues.length; i++) {
xData.add(xValues[i]);
}
BarDataSet barDataSet = new BarDataSet(yData, "Chart");
barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
BarData data = new BarData(xData, barDataSet);
barChart.setData(data);
barChart.getAxisRight().setDrawLabels(false);
barChart.animateY(2000);
}
}
Es ist nicht klar, was wollen Sie tun? – Krish
Ich möchte ein Balkendiagramm aus Daten erstellen, die ich zuvor heruntergeladen habe – Dominik
Sie können die Referenzliste in einer Singleton-Klasse behalten. –
Krish