2017-11-17 10 views
1

私は、XMLファイルを解析し、日付と値を収集し、forループとデータポイントの配列リストを使用してGraphViewでこのデータをプロットするアプリケーションに取り組んでいます。私は日付と値の範囲でx軸とy軸を生成するグラフを得ることができますが、点はプロットされません。GraphView forループプロットデータなし

Androidモニターではデータポイントが生成されていることがわかりますが、プロットしていないだけです。コードに何か間違っているはずですが、わかりません。何か案は?

更新:XMLファイルに同じ日付の複数の値があることを追加する必要があります(データは15分ごとに収集されます)。私の推測では、配列内のこれらの値を平均して日付ごとに1つの値しか持たないようにする必要があるということです。これは、GraphViewに影響を与える可能性があります。

パブリッククラスGraphActivityは、私はそれを考え出したAppCompatActivity {

GraphView graphView; 
LineGraphSeries<DataPoint> series; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_graph); 

    graphView = (GraphView) findViewById(R.id.graph); 
    try { 
     InputStream is = GraphActivity.this.getResources() 
       .getAssets().open("smallmonth.xml"); 
     ArrayList<GraphDateEntry> dateOnlyEntrySeries = new GraphDateParsing2().parse(is); 

     InputStream is1 = GraphActivity.this.getResources() 
       .getAssets().open("smallmonth.xml"); 
     ArrayList<GraphValueEntry> valueOnlySeries = new GraphValueParsing().parse(is1); 

     for (int i = 0; i < dateOnlyEntrySeries.size(); i++) { 

      Double value = Double.parseDouble(valueOnlySeries.get(i).value); 
      String stringDate = dateOnlyEntrySeries.get(i).date; 

      DataPoint dateAndValue = new DataPoint(new SimpleDateFormat("yyyy-MM-dd").parse(stringDate), value); 

      series = new LineGraphSeries<>(); 
      series.appendData(dateAndValue, true, dateOnlyEntrySeries.size()); 
     } 

     graphView.addSeries(series); 
     series.setColor(Color.BLACK); 
     series.setThickness(8); 

     graphView.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() { 
      @Override 
      public String formatLabel(double value, boolean isValueX) { 
       if (isValueX) { 
        Log.d("formatLabel: ", sdf.format(new Date((long) value))); 
        return sdf.format(new Date((long) value)); 
       } else { 
        return super.formatLabel(value, isValueX); 
       } 
      } 
     }); 

    } catch (IOException ie) { 
     ie.printStackTrace(); 
    } catch (ParseException pe) { 
     pe.printStackTrace(); 
    } 
} 

答えて

0

を拡張します。私は自分の配列をループし、重複することなく新しい配列を作成することから始めました。それから私は、データポイントの配列を作成するために、これらの配列を使用してグラフにすることを追加しました:

  for (int j = 0; j < dateOnlyEntrySeries.size() - 1; j++) { 
       String stringValue = valueOnlySeries.get(j).value; 
       String stringDate = dateOnlyEntrySeries.get(j).date; 
       String stringDate2 = dateOnlyEntrySeries.get(j + 1).date; 

       finalDate = dateOnlyEntrySeries.get(dateOnlyEntrySeries.size() - 1).date; 
       if (!(stringDate.equalsIgnoreCase(stringDate2))) { 

        array3.add(stringDate); 
        array4.add(stringValue); 
        n = n + 1; 
       } 
      } 

      dp = new DataPoint[array3.size()]; 
      int arraySize = array3.size(); 

      for (int i = 0; i < array3.size(); i++) { 
       Double newDoubleValue = Double.parseDouble(array4.get(i)); 
       String newStringDate = array3.get(i); 

       dp[i] = new DataPoint(new SimpleDateFormat("yyyy-MM-dd").parse(newStringDate), newDoubleValue); 
      } 

      finalDoubleValue = Double.parseDouble(valueOnlySeries.get(valueOnlySeries.size() - 1).value); 

      DataPoint finalDataPoint = new DataPoint(
        new SimpleDateFormat("yyyy-MM-dd").parse(finalDate), finalDoubleValue); 


      series = new LineGraphSeries<>(dp); 

      series.appendData(finalDataPoint, true, 30); 
      graphView.addSeries(series); 

それは軸が正しくラベル付けを取得するためにGraphView設定でいくつかのより多くの微調整を取り、グラフがデータのために適切な大きさが、私それが働いた。

関連する問題