сохранить пользовательские данные в течение дня (в тот же день - > много пользовательских данных)

у меня есть приложение, где пользователь вводит данные в EditText и нажимает кнопку Сохранить.

нажав "сохранить", я сохраняю в файле данные пользователя (в одном столбце) и текущую дату (в другом столбце).

затем я нажимаю другую кнопку и делаю график (используя achartengine) дата (ось x) данные (ось y).

Итак, ввод данных в течение дня приводит к сохранению, например: "1" (пользовательские данные) -> 20/4/2013 , "2" -> 20/4/2013 , "3" -> 20/4/2013.

и на графике у меня есть 3 точки по оси y (ОК) и 3 точки по оси x (не ок).

Я хочу иметь одну точку на оси 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");

но я не могу понять.

например I ввод данных "1" , "2" ,"3" в дате "20/4/2013".

это то, что я получаю теперь, используя свой код: это то, что я получаю сейчас http://i35.tinypic.com/2rmsck5.png

но мне нужен график, как показано ниже: данные, введенные в тот же день должны быть вместе:: это то, что я хочу http://i38.tinypic.com/255p5i9.png

---------------обновление--------------------------------------------------

  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 ответов


это действительно проблема AChartEngine. Внутренняя модель, используемая для хранения в ArrayLists и этих проблем не существовало. В какой-то момент были усилия сообщества, чтобы сделать 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.


ok.

когда вы вызываете new Date (), вы также определяете время создания (формат по умолчанию: 1 января 1970 года, 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 в качестве текущей даты :).

надеюсь, что это правда, и это помогает, Тони!--2-->


есть несколько возможных решений этой проблемы:

  1. вместо даты поместите время unix даты (длинное значение) . чтобы показать его, вы можете преобразовать время unix в форматированную дату .

  2. поскольку excel может обрабатывать даты, отредактируйте выходной файл и используйте "=дата (год, месяц, день) "или"=DATEVALUE ("2013/4/20")"

Это все потому, что проблема даже не связана с android. показать данные. данные в порядке. просто ты так это показываешь.


Если я не ошибаюсь это не проблема сохранения или загрузки данных, а просто для отображения данных. Ваш алгоритм графа должен распознавать равные даты и не делать для него новую запись.

Как есть, похоже, что дата рассматривается как метка, а не как значение оси x, что было бы разумно, потому что строка даты не является числовой.

Я предлагаю проверить achartengine, если есть способ дополнительно предоставить x-значения, а затем пусть они только увеличение, если строка даты следующей записи отличается от предыдущей записи.

вы, вероятно, должны дать другую модель achartengine.

Я не думаю, что это проблема сохранения, потому что хорошо сохраненная дата является правильной, поэтому любое поведение в основном так, как ожидалось.