Java 从下载的数据绘制条形图

Java 从下载的数据绘制条形图,java,android,mpandroidchart,Java,Android,Mpandroidchart,这是我的问题。我试图从API下载的数据中绘制图表。要下载数据,我使用OTTO和改装库。对于绘制图表,我使用的是MPAndroidChart。在震级频率图中我正在准备要在图表上创建的数据。当我在onServerEvent中将下载的数据实现到构造函数并创建图表方法时,我得到的信息是,我的图表没有可用的数据。是否可以在OnCreateView方法之外创建条形图?或者如何将下载的数据实现到OnCreateView public class GraphFragment extends Fragment {

这是我的问题。我试图从API下载的数据中绘制图表。要下载数据,我使用
OTTO
改装
库。对于绘制图表,我使用的是
MPAndroidChart
。在
震级频率图中
我正在准备要在图表上创建的数据。当我在
onServerEvent
中将下载的数据实现到构造函数并创建图表方法时,我得到的信息是,我的图表没有可用的数据。是否可以在
OnCreateView
方法之外创建条形图?或者如何将下载的数据实现到
OnCreateView

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);
    }
}
公共类GraphFragment扩展了片段{
私人视野;
私人条形图;
private Bus=BusProvider.getInstance();
私人震级频率图震级频率图;
私有列表功能;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_图,容器,假);
条形图=(条形图)视图。findViewById(R.id.barChart\u震级频率);
返回视图;
}
@订阅
ServerEvent(ServerEvent ServerEvent)上的公共无效{
features=serverEvent.getDataResponse().getFeatures();
震级频率图=新的震级频率图(特征、条形图);
magnitudeFrequencyChart.getMagnitudeFrequencyChart();
}
@订阅
公共无效onErrorEvent(ErrorEvent ErrorEvent){
Toast.makeText(getActivity(),“”+errorEvent.getErrorMsg(),Toast.LENGTH_SHORT).show();
}
@凌驾
恢复时公开作废(){
super.onResume();
巴士登记册(本);
}
@凌驾
公共无效暂停(){
super.onPause();
取消注册(本);
}
}
类创建图表的位置:

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);
    }
}
公共类震级频率图{
私有列表功能;
私人条形图;
公共震级频率图(列表特征,条形图){
这个。特征=特征;
this.barChart=条形图;
}
公共虚空GetMagnitureFrequencychart(){
int mag3=0;
int mag4=0;
int mag5=0;
int mag6=0;
int mag7=0;
int-mag8=0;
int-mag9=0;
对于(int i=0;i如果(震级>=3&&magnitude=4&&magnitude=5&&magnitude=6&&magnitude=7&&magnitude=8&&magnitude=9&&magnitude您可以在
onCreateView()方法内的条形图上使用
findViewById()

我认为您真正想要做的是隐藏图表,直到数据从服务器到达。如果是这样,您需要做的只是:

@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);
    barChart.setVisibility(View.INVISIBLE);
    return view;
}
然后在
内获取幅值频率图()


不清楚您想做什么?我想用我之前下载的数据创建一个条形图。您可以将引用列表保存在一个singleton类中。谢谢您的帮助,但它不起作用。不知为什么,当我创建serverEvent时,条形图没有获得下载的数据。@Dominik是被触发的
onServerEvent
吗?@Dominikminik还检查您是否获得非空列表
    BarData data = new BarData(xData, barDataSet);
    barChart.setData(data);
    barChart.setVisibility(View.VISIBLE);
    barChart.getAxisRight().setDrawLabels(false);
    barChart.animateY(2000);
}