сохранить пользовательские данные в течение дня (в тот же день - > много пользовательских данных)
у меня есть приложение, где пользователь вводит данные в 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. Внутренняя модель, используемая для хранения в 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
.
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-->
есть несколько возможных решений этой проблемы:
вместо даты поместите время unix даты (длинное значение) . чтобы показать его, вы можете преобразовать время unix в форматированную дату .
поскольку excel может обрабатывать даты, отредактируйте выходной файл и используйте "=дата (год, месяц, день) "или"=DATEVALUE ("2013/4/20")"
Это все потому, что проблема даже не связана с android. показать данные. данные в порядке. просто ты так это показываешь.
Если я не ошибаюсь это не проблема сохранения или загрузки данных, а просто для отображения данных. Ваш алгоритм графа должен распознавать равные даты и не делать для него новую запись.
Как есть, похоже, что дата рассматривается как метка, а не как значение оси x, что было бы разумно, потому что строка даты не является числовой.
Я предлагаю проверить achartengine, если есть способ дополнительно предоставить x-значения, а затем пусть они только увеличение, если строка даты следующей записи отличается от предыдущей записи.
вы, вероятно, должны дать другую модель achartengine.
Я не думаю, что это проблема сохранения, потому что хорошо сохраненная дата является правильной, поэтому любое поведение в основном так, как ожидалось.