在一天内保存用户数据(同一天 - >许多用户数据)

时间:2013-04-20 19:12:01

标签: java android achartengine

我有一个应用程序,用户在edittext中输入数据并按下保存按钮。

按“保存”,我在文件中保存用户数据(在一列中)和当前日期(在另一列中)。

然后,我按下另一个按钮并制作绘图(使用achartengine)日期(x轴)数据(y轴)。

因此,在一天内输入数据会导致保存,例如:“1”(用户数据) - > 20/4/2013,“2” - > 20/4/2013,“3” - > 20/4/2013。

在情节中,我在y轴上有3个点(ok),在x轴上有3个点(不行)。

我想在x轴上有一个点,因为在同一天输入的数据。

我保存数据:

public void savefunc(){

        SimpleDateFormat thedate = new SimpleDateFormat("dd/MM/yyyy"); 
        Date d=new Date();

        String formattedDate=thedate.format(d);
        Log.d("tag","format"+formattedDate);
        dates_Strings.add(formattedDate);


        double thedata=Double.parseDouble(value.getText().toString().trim());
            mydata.add(thedata);


        File sdCard = Environment.getExternalStorageDirectory();
        File directory = new File (sdCard, "MyFiles");
        directory.mkdirs();            
        File file = new File(directory, filename);

        FileOutputStream fos;

        //saving them
        try {
           fos = new FileOutputStream(file);

              BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
              for (int i=0;i<mydata.size();i++){
                 bw.write(mydata.get(i)+","+dates_Strings.get(i)+"\n");
              }
              ...

如何在一天内保存用户数据?

也许有人在这里查看:Date d=new Date();?检查是否是同一天。

或者在这里:bw.write(mydata.get(i)+","+dates_Strings.get(i)+"\n");

但我无法想象。

例如,我在日期“20/4/2013”​​中输入数据“1”,“2”,“3”。

这是我现在使用我的代码获得的: This is what I get now http://i35.tinypic.com/2rmsck5.png

但是我需要如下图:在同一天输入的数据应该放在一起:: This is what I want http://i38.tinypic.com/255p5i9.png

--------------- UPDATE ------------------------------- -------------------

  mRenderer.setXLabels(0);
    for (int i=0;i<mydata.size();i++){

        mRenderer.addXTextLabel(i,dates_Strings.get(i));

        Date lastDate=null;
        String lastdate="";

        try{

    // the initial date
Date initialDate=formatter.parse(dates_Strings.get(mydata.size()-1));

Calendar c = Calendar.getInstance();
c.setTime(initialDate);
c.add(Calendar.DATE, 1);  // increase date by one 
lastDate =c.getTime();                  

}catch ...
      }
    mRenderer.setXAxisMax(lastDate.getTime());
    mRenderer.addXTextLabel(i,dates_Strings.get(i));
    }

4 个答案:

答案 0 :(得分:1)

确定。

当您调用新的Date()时,您还可以确定创建时间(默认格式为:1970年1月1日,GMT 00:00:00)。由于您的积分是在不同时间但相同日期创建的,因此您的积分不会对齐。

所以你应该这样做:

Calendar thisDay = Calendar.getInstance();
thisDay.set(Calendar.HOUR, 0);
thisDay.set(Calendar.MINUTE, 0);
thisDay.set(Calendar.SECOND, 0);
Date d=thisDay.getTime();//this returns Date :) - it is funny but true

然后你可以用d作为当前日期:)。

希望这是真的,它有帮助, 托尼

答案 1 :(得分:1)

这个问题有几种可能的解决方案:

  1. 而不是日期,将日期的unix时间(长值)。为了显示它,您可以将unix时间转换为格式化日期。

  2. 因为excel可以处理日期,编辑输出文件并使用“=日期(年,月,日)”或“= DATEVALUE(”2013/4/20“)”

  3. 这都是因为问题甚至与android无关。它是关于显示数据。数据还可以。这就是你如何展示它。

答案 2 :(得分:1)

如果我没有弄错,这不是保存或加载数据的问题,而只是显示数据。您的图算法应该识别相等的日期,不要为它创建新的条目。

实际上,似乎日期被视为标签,而不是x轴值,这是合理的,因为日期字符串不是数字。

我建议检查achartengine是否有办法额外提供x值,然后只有当下一个条目的日期字符串与前一个条目不同时才让它们增加。

您可能需要为achartengine提供不同的模型。

我不认为这是一个保存问题,因为存储的日期是正确的,因此任何行为都大部分符合预期。

答案 3 :(得分:1)

这确实是一个AChartEngine问题。以前的内部模型保存在ArrayList中,并且这些问题不存在。在某些时候,社区努力通过大量数据点使AChartEngine更快。此时,模型开始使用Map而不是ArrayList。此实现阻止了多次添加相同的X值。但是,为了解决这个问题,我向X添加了一个非常小的值,如果它已经存在的话。在您的示例中,第一个值为20/04/2013 00:00:00.0,第二个值为20/04/2013 00:00:00.001,第三个值为20/04/2013 00:00:00.002

现在,问题的解决方案是在X轴上有更宽的范围。

renderer.setXAxisMax(someDate.getTime());

其中someDate可以是21/04/2013