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