在一天保存用户数据(在同一天 - >许多用户数据)(save user data during

2019-08-31 15:50发布

我有其中用户在的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");

但我想不通。

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

这是我现在得到使用我的代码: 这是我现在http://i35.tinypic.com/2rmsck5.png得到

但我需要图如下图所示:在同一天输入的数据应该被放在一起:: 这是我想要的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));
    }

Answer 1:

这是一个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



Answer 2:

好。

当你调用新的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为当前日期:)。

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



Answer 3:

有此问题的一些可能的解决方案:

  1. 而不是一个日期,把日期(长值)的UNIX时间。 为了表现它,你可以转换UNIX时间格式的日期。

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

这一切都是因为问题不相关,甚至到Android。 它是关于显示数据。 该数据是确定的。 你如何表现它,它只是。



Answer 4:

如果我不是非常错误的,这不是保存或加载数据,而只是显示数据的问题。 您的图形算法应该认识到平等的日期,不要让为它的新条目。

因为它是,它看起来像的日期被视为标签,而不是作为x轴值,这将是合理的,因为日期字符串不是数字。

我建议检查achartengine是否有一种方法来提供额外的x值,然后让,如果下一个条目的日期字符串是前一个条目的不同它们只会增加。

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

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



文章来源: save user data during a day (the same day -> many user data)