2016-12-14 8 views
1

Я использую MPAndroidChart для моей линейной диаграммы. У меня есть значения даты и оценки.
Пример: 11/10/2016 мой счет был 45.Android - MPAndroidChart LineChart, не в состоянии построить в соответствии с датой даты

Я борюсь с датами. Не знаете, как установить его в моем setYAxisValues.
Я получаю свои значения от апитера отдыха и помещаю его в график.

В этой части есть моя проблема.

yVals.add(new Entry(Float.valueOf(ocd.getScore()), foo)); 

Если изменить Foo к нормальному значению Int, как 1, 2, 3 У меня нет никаких проблем. График работает. Проблема, мне нужно использовать даты для расчета моей стоимости в правильном месте.

@Override 
protected void onPostExecute(List<ResultModel> result) { 
    super.onPostExecute(result); 
    //populating my yAxis with values from rest 
    for (ResultModel ocd : resModelList){ 
     long unixSeconds = Long.parseLong(ocd.getPost_date()); 
     Date date = new Date(unixSeconds*1000L); 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
     String formattedDate = sdf.format(date); 
     int foo = Integer.parseInt(formattedDate); 
     yVals.add(new Entry(Float.valueOf(ocd.getScore()), foo)); 
    } 
} 

Ось X работает

//set vales 
private ArrayList<String> setXAxisValues(){ 
    xVals = new ArrayList<String>(); 
//MM/dd/yyyy 
    xVals.add("01/01/2016"); 
    xVals.add("02/01/2016"); 
    xVals.add("03/01/2016"); 
    xVals.add("04/01/2016"); 
    xVals.add("05/01/2016"); 
    return xVals; 
} 

private ArrayList<Entry> setYAxisValues(){ 
    yVals = new ArrayList<Entry>(); 
    return yVals; 
} 

Заранее спасибо

ответ

1

Я имел подобный вопрос, дело - библиотека MPChart может не иметь ничего, кроме поплавка для оси X. Я бы предложил вам иметь ось X, представленную миллиметрами даты. Предположим, у вас есть четыре значения с датами «01/01/2016», «02/01/2016», «03/01/2016», «04/01/2016», «05/01/2016». Вы добавляете значения, как

yVals.add(new Entry(Float.valueOf(ocd.getScore()), "01/01/2016".toMillis())); 

«01/01/2016» .toMillis() псевдокод, конечно, вам необходимо преобразовать дату в целое (с плавающей точкой).

Затем настройте minX как «01/01/2016» .toMillis(), maxX как «04/01/2016» .toMillis(), и предоставите формуляр, который будет отформатировать этот миллис обратно до строки даты:

private class LabelFormatter implements AxisValueFormatter { 

     private Context context; 

     private LabelFormatter(Context context) { 
      this.context = context; 
     } 

     @Override 
     public int getDecimalDigits() { 
      return -1; 
     } 

     @Override 
     public String getFormattedValue(float value, AxisBase axis) { 
      return DateUtils.formatDateTime(context, (long) value, DateUtils.FORMAT_SHOW_DATE); 
     } 
    } 
+0

Спасибо, за указание меня в правильном направлении. Я застрял в секции getFormattedValue. Не могли бы вы немного помочь с этой частью. –

+0

@CharmGeld обновил этот раздел, попробуйте этот код, он должен распечатать дату в локали устройства. Для разных параметров форматирования я рекомендую использовать android.text.format.DateFormat или этот класс android.text.format.DateUtils. Они заботятся о параметрах отображения даты и времени каждого пользователя: языковой стандарт, формат 12/24 и т. Д. И т. Д. –

+0

Еще раз спасибо за вашу помощь –

 Смежные вопросы

  • Нет связанных вопросов^_^