Achartengine 折线图

8
我正在使用Achartengine来创建一条折线图。我的当前月份已经显示出来了,但是第二条折线,即上个月的数据没有显示出来。以下是lass和logcat的信息。如您从logcat中可以看到,我的日期是正确的,上个月的计数也是正确的。那么为什么它不显示出来呢,这就超出了我的理解范围。
日志记录:
08-07 16:13:43.969: I/PROJECTCARUSO(11734): DEBUG startdate: 2013-07-01 enddate: 2013-07-31
08-07 16:13:43.969: I/PROJECTCARUSO(11734): count: 9
08-07 16:13:43.979: I/PROJECTCARUSO(11734): DEBUG startdate: 2013-08-01 enddate: 2013-08-31

类:

public class TempHistoryFragment extends Fragment{
    private GraphicalView mChartView;
    SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd");  

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        Calendar cal = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        SimpleDateFormat month_date = new SimpleDateFormat("MMMMMMMMM");
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd",Locale.US);
        String month_name = month_date.format(cal.getTime());
        ArrayList<Integer> xArray = new ArrayList<Integer>();
        ArrayList<Integer> yArray = new ArrayList<Integer>();
        ArrayList<Integer> xArray2 = new ArrayList<Integer>();
        ArrayList<Integer> yArray2 = new ArrayList<Integer>();

        cal.add(Calendar.MONTH ,-1);
        String prev_month_name = month_date.format(cal.getTime());


        int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);


        //***********************************************//
        // Our first data Last MONTH
        //***********************************************//
        //start date for cursor
        //cal.add(Calendar.MONTH, -1);
        cal.set(Calendar.DATE, 1);
        String startdate = df.format(cal.getTime());

        //end date
        cal.set(Calendar.DATE, daysInMonth);
        String enddate = df.format(cal.getTime());


        Log.i("PROJECTCARUSO","DEBUG startdate: " + startdate + " enddate: " + enddate);
        Cursor c = getActivity().getContentResolver().query(StatusProvider.CONTENT_URI_CHARTING, null, "? < " + StatusData.KEY_CHARTING_DATE + " AND ? > " + StatusData.KEY_CHARTING_DATE , new String[] {startdate, enddate}, null); //
        c.moveToFirst();
        Log.i("PROJECTCARUSO","count: " + c.getCount());
        if (c.getCount()>0 && c!=null) {
            while (c.isAfterLast() == false) {
                if ((isNumeric(c.getString(c.getColumnIndex(StatusData.KEY_CHARTING_TEMPERATURE))))) {


                java.util.Date date = null;
                int day = 0;

                //get date from database
                String datetest = c.getString(c.getColumnIndex(StatusData.KEY_CHARTING_DATE));


                //try to reformat to date.
                try {
                    date = format.parse(datetest);
                    day = date.getDate();
                } catch (java.text.ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }  

                xArray.add(day);

                }
            c.moveToNext();
            } 
        }

        int[] x = new int[xArray.size()];
        for (int i = 0; i < xArray.size(); i++) {
            x[i] = xArray.get(i);
        }

        int[] y = new int[yArray.size()];
        for (int i = 0; i < yArray.size(); i++) {
            y[i] = yArray.get(i);
        }

        TimeSeries series = new TimeSeries(prev_month_name); 
        for( int i = 0; i < y.length; i++)
        {
            series.add(x[i], y[i]);
        }


        //***********************************************//
        // Our second data THIS MONTH
        //***********************************************//
        //start date for cursor
        cal2.set(Calendar.DATE, 1);
        String startdate2 = df.format(cal2.getTime());

        //end date
        cal2.set(Calendar.DATE, daysInMonth);
        String enddate2 = df.format(cal2.getTime());


        Log.i("PROJECTCARUSO","DEBUG startdate: " + startdate2 + " enddate: " + enddate2);
        Cursor c2 = getActivity().getContentResolver().query(StatusProvider.CONTENT_URI_CHARTING, null, "? < " + StatusData.KEY_CHARTING_DATE + " AND ? > " + StatusData.KEY_CHARTING_DATE , new String[] {startdate2, enddate2}, null); //
        c2.moveToFirst();


        if (c2.getCount()>0 && c2!=null) {
            while (c2.isAfterLast() == false)  {
                if (isNumeric(c2.getString(c2.getColumnIndex(StatusData.KEY_CHARTING_TEMPERATURE)))){

                    yArray2.add(c2.getInt(c2.getColumnIndex(StatusData.KEY_CHARTING_TEMPERATURE)));

                    java.util.Date date = null;
                    int day = 0;

                    //get date from database
                    String datetest = c2.getString(c2.getColumnIndex(StatusData.KEY_CHARTING_DATE));


                    //try to reformat to date.
                    try {
                        date = format.parse(datetest);
                        day = date.getDate();
                    } catch (java.text.ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }  

                    xArray2.add(day);

                }
            c2.moveToNext();
            } 
        }


        int[] x2 = new int[xArray2.size()];
        for (int i = 0; i < xArray2.size(); i++) {
            x2[i] = xArray2.get(i);
        }

        int[] y2 = new int[yArray2.size()];
        for (int i = 0; i < yArray2.size(); i++) {
            y2[i] = yArray2.get(i);
        }

        TimeSeries series2 = new TimeSeries(month_name); 
        for( int i = 0; i < x2.length; i++)
        {
            series2.add(x2[i], y2[i]);
        }



        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        dataset.addSeries(series);
        dataset.addSeries(series2);

        XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); // Holds a collection of XYSeriesRenderer and customizes the graph
        XYSeriesRenderer renderer = new XYSeriesRenderer(); // This will be used to customize line 1
        XYSeriesRenderer renderer2 = new XYSeriesRenderer(); // This will be used to customize line 2
        mRenderer.addSeriesRenderer(renderer);
        mRenderer.addSeriesRenderer(renderer2);

        // Customization time for line 1!
        renderer.setColor(getResources().getColor(R.color.complementary));
        renderer.setPointStyle(PointStyle.SQUARE);
        renderer.setFillPoints(true);

        // Customization time for line 2!
        renderer2.setColor(getResources().getColor(R.color.base));
        renderer2.setPointStyle(PointStyle.DIAMOND);
        renderer2.setFillPoints(true);

        mChartView = ChartFactory.getLineChartView(getActivity(), dataset, mRenderer);

        //Set Chart Title and labels
        mRenderer.setChartTitle("Temperature Tracking");
        mRenderer.setChartTitleTextSize(getResources().getDimension(R.dimen.largeText));
        mRenderer.setLabelsColor(getResources().getColor(R.color.primaryTextDark));

        //YAxis of Temp
        mRenderer.setYTitle("Temperature", 0);
        mRenderer.setYAxisMin(80, 0);
        mRenderer.setYAxisMax(110, 0);
        mRenderer.setYLabelsAlign(Align.CENTER);
        mRenderer.setYLabelsColor(0, getResources().getColor(R.color.primaryTextDark)); 

        //XAxis of month
        mRenderer.setXLabels(20);
        mRenderer.setXTitle(month_name);        
        mRenderer.setXAxisMin(1);
        mRenderer.setXAxisMax(daysInMonth);
        mRenderer.setXLabelsColor(getResources().getColor(R.color.primaryTextDark)); 

        //Set the display
        mRenderer.setMarginsColor(getResources().getColor(R.color.transparent));
        mRenderer.setShowCustomTextGrid(true);
        mRenderer.setAxisTitleTextSize(getResources().getDimension(R.dimen.mediumText));
        mRenderer.setLabelsTextSize(getResources().getDimension(R.dimen.smallMediumText));
        mRenderer.setPanEnabled(false, false);
        mRenderer.setClickEnabled(false);
        mRenderer.setZoomEnabled(false, false);


        return mChartView;

    }

    @SuppressWarnings("unused")
    public static boolean isNumeric(String str)  
    {  
      try  
      {  
        double d = Double.parseDouble(str);  
      }  
      catch(NumberFormatException nfe)  
      {  
        return false;  
      }  
      return true;  
    }

}

噢,这里是那些颜色:

    <color name ="base">#51bbc2</color>
    <color name ="complementary">#C25951</color>

The result


发布一张截图。这比数百行代码更有帮助。 - Dan D.
已添加屏幕截图,只有248行,还不错 ;) - jcaruso
1
yArray2的值范围是多少? - Dan D.
我手头有的是yArray2: 95,95,98和xArray2: 3,4,7,但这些是正在显示的。我想你想知道yArray和xArray...让我看看。 - jcaruso
1个回答

0

感谢 @Dan 带我找到了解决方案。我记录了所有的点,以确保所有正确的值都被放置在正确的数组中,结果发现 yArray.add(c.getInt(c.getColumnIndex(StatusData.KEY_CHARTING_TEMPERATURE))); 不知何故被删除了。现在它可以工作了!耶!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接