Java 在一天内保存用户数据(同一天->;多个用户数据)
我有一个应用程序,其中用户在edittext中输入数据并按下save按钮 通过按“保存”,我将用户数据(在一列)和当前日期(在另一列)保存在文件中 然后,我按下另一个按钮并绘制(使用achartengine)日期(x轴)数据(y轴) 因此,在一天中输入数据会导致保存,例如:“1”(用户数据)->20/4/2013,“2”->20/4/2013,“3”->20/4/2013 在图中,我在y轴上有3个点(正常),在x轴上有3个点(不正常) 我想在x轴上有一个点,因为数据是在同一天输入的 我保存数据:Java 在一天内保存用户数据(同一天->;多个用户数据),java,android,achartengine,Java,Android,Achartengine,我有一个应用程序,其中用户在edittext中输入数据并按下save按钮 通过按“保存”,我将用户数据(在一列)和当前日期(在另一列)保存在文件中 然后,我按下另一个按钮并绘制(使用achartengine)日期(x轴)数据(y轴) 因此,在一天中输入数据会导致保存,例如:“1”(用户数据)->20/4/2013,“2”->20/4/2013,“3”->20/4/2013 在图中,我在y轴上有3个点(正常),在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");
}
...
嗯
调用new Date()时,还可以确定创建时间(默认格式为:1970年1月1日00:00:00 GMT)。因为您的点是在不同的时间但在相同的日期创建的,所以您的点没有对齐
所以你应该这样做:
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作为当前日期:)
希望这是真的,而且有帮助,
Toni此问题有几种可能的解决方案:
这都是因为这个问题甚至与安卓无关。这是关于显示数据的。数据还可以。这只是你如何显示它。如果我没有大错特错的话,这不是保存或加载数据的问题,而只是显示数据的问题。您的图形算法应该识别相同的日期,并且不为其创建新条目 事实上,日期似乎被视为标签,而不是x轴值,这是合理的,因为日期字符串不是数字 我建议检查achartengine是否有办法提供额外的x值,然后仅当下一个条目的日期字符串与上一个条目的日期字符串不同时,才让它们增加 你可能需要给阿喀滕尼一个不同的模型
我不认为这是一个保存问题,因为存储的日期是正确的,因此任何行为都与预期的一样。这确实是一个AChartEngine问题。内部模型过去保存在
ArrayList
s中,这些问题并不存在。在某个时候,有一个社区的努力,使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
也包括快照,以使其更清晰@:使用上述内容,然后使用“SimpleDateFormat thedate=new SimpleDateFormat(“dd/MM/yyyyy”);“String formattedDate=thedate.format(d);dates\u Strings.add(formattedDate);”,因为我想将日期存储为字符串)不起作用。仍然是同一个问题..:那么,你对此有什么其他想法吗?也许可以检查一下日期是否相同?谢谢你,在从数据库读取数据时,如何创建日期对象?:对不起,我不明白你的问题?当你从文件加载数据时(将数据存储到文件中实际上并不好——为什么不使用sqlite?),如何将其转换为日期?您在dd/MM/yyyy中读取txt文件日期。您如何将此字符串放入日期对象?:我不知道如何执行1。您能否根据我的代码给我一个示例?另外,我不明白2。我应该如何执行?感谢您的帮助。这两个示例都不涉及android代码(除了#1,您只使用date.getTime())。其余部分在excel中完成。对于#2,您创建一个引用日期列的新列。如果日期列为“a”,新列为“C”,则根据“a”创建“C”单元格的值:“=DATEVALUE($A1)”对于第一个单元格,“=DATEVALUE($A2)”例如,我想让绘图正确。我不太喜欢excel文件。因此,如果你不喜欢excel文件,只需创建你自己的应用程序(使用你想要的任何编程语言和平台)这很好地说明了这一点。数据仍然很好,可以处理。:但问题是我无法处理x轴图中的数据。:我照你说的做了,而且似乎很有效。.我在2013年5月4日输入了一些数据,该图与上面的一样正常。但是,当我在2013年5月5日输入一些其他数据时,x轴中的2013年5月4日被05日取代/2013年5月5日,在所有数据所在的y轴上:可能是因为我有“Date someDate=null;”?另外,我使用“SimpleDateFormat formatter=new SimpleDateFormat(“dd/MM/yyyyy”,Locale.US”);作为日期。(感谢您的帮助):我更新了。“Dates_字符串”是一个包含日期的字符串列表。我将“someDate”作为我保存(使用)的第一个日期。只需使用晚于最后一个值的日期调用setXAxisMax():我更新了我的帖子,显示了我用于此的代码。我仍然得到了相同的结果。您能检查我是否正确定义了初始日期和最后日期吗?另外,我使用lastDate=c.getTime()然后使用“mrender.setXAxisMax(lastDate.getTime());”(再次使用lastDate.getTime())。我不确定整件事。我正在尝试将初始日期定义为最后一个值(mydata.size()-1),然后将此日期增加1,以便将其放入setXAxisMax。谢谢
renderer.setXAxisMax(someDate.getTime());