2017-04-04 2 views
0

これは私の問題です。私はAPIからダウンロードしているデータからグラフを描画しようとしています。データをダウンロードするために、私はOTTORetrofitライブラリを使用します。私はMPAndroidChartを使っています。 MagnitudeFrequencyChart私はチャート上に作成するデータを準備しています。 onServerEventにダウンロードしたデータをコンストラクタに実装してグラフメソッドを作成するとき、私のチャートにはデータがありません。 OnCreateViewメソッドの外側にbarChartを作成することはできますか?または、ダウンロードしたデータを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); 
    } 
} 

クラス:

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); 
    } 
} 
+0

getMagnitudeFrequencyChart()内側その後、

@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; } 

? – Krish

+0

私が先にダウンロードしたデータから棒グラフを作成したい – Dominik

+0

参照リストをシングルトンクラスに保つことができます。 – Krish

答えて

0

あなたがonCreateView()メソッド内BarChartコントロールにfindViewById()を使用して正しいです。

あなたが本当にやりたいことは、データがサーバーから到着するまでグラフを非表示にすることだと思います。その場合は、あなたがする必要があるすべてはされています。あなたがしたい何をすべきか明確ではありません

BarData data = new BarData(xData, barDataSet); 
    barChart.setData(data); 
    barChart.setVisibility(View.VISIBLE); 
    barChart.getAxisRight().setDrawLabels(false); 
    barChart.animateY(2000); 
} 
+0

助けていただきありがとうございますが、動作しません。何とかserverEventを作成しているときに、barChartはダウンロードされたデータを取得していません。 – Dominik

+0

@DominikはonServerEventがトリガーされていますか? –

+0

@Dominikも空ではないリストを確認していますか –

関連する問題