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

我有一个应用程序,用户在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”。

这就是我现在使用我的代码得到的: 这就是我现在得到的内容http://sofzh.miximages.com/java/2rmsck5.png

但是我需要如下图:在同一天输入的数据应该放在一起:: 这就是我想要的http://sofzh.miximages.com/java/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)); } 

这确实是一个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一样。

好。

当您调用新的Date()时,您还可以确定创建时间(默认格式为:1970年1月1日,格林威治标准时间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. 而不是日期,把日期的unix时间(长值)。 为了显示它,您可以将unix时间转换为格式化日期。

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

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

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

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

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

你可能不得不给achartengine一个不同的模型。

我不认为这是一个保存问题,因为存储的日期是正确的,所以任何行为都大多是预期的。