2017-01-11 7 views
0

Я хочу заполнить MPAndroidChart с использованием данных sqlite, все, похоже, работает, но я не знаю, почему сама диаграмма не отображается в действии. Sqlite запроса есть данные, как это в нем:Данные MPAndroidChart из slqlite не отображаются в действии

 
---------------------- 
| Data  | Usage | 
|------------|-------| 
| 2016-04-24 | 7.58 | 
| 2016-04-06 | 7.74 | 
| 2016-03-13 | 8.46 | 
| 2016-03-22 | 8.29 | 
---------------------- 

Но даже график не показывает вверх. Я был парование guidie в странице GitHub MPAndroidChart, но кажется, что я испортил somethink ...

ChartActivity.java

public void setData(String car_id){ 

    dbHelper = new DBHelper(context); 

    Cursor curChartFuelUsage = dbHelper.getChartFuelUsage(car_id); 
    curChartFuelUsage.moveToFirst(); 

    int count = curChartFuelUsage.getCount(); 
    Float[] x_refuel_data = new Float[count]; 
    Float[] y_fuel_usage = new Float[count]; 


    if (curChartFuelUsage.moveToFirst()){ 
     Log.e("CHART", "moveToFirst OK, count: " + count); 

      for (int i = 0 ; i < count ; i++){ 
       x_refuel_data[i] = curChartFuelUsage.getFloat(0); 
       y_fuel_usage[i] = curChartFuelUsage.getFloat(1); 
       curChartFuelUsage.moveToNext(); 
      } 

     ArrayList<Entry> values = new ArrayList<Entry>(); 

     for (int i = 0 ; i < count ; i++){ 
      values.add(new Entry(x_refuel_data[i], y_fuel_usage[i])); 
     } 

     LineDataSet set1 = new LineDataSet(values,"Test"); 
     set1.setAxisDependency(YAxis.AxisDependency.LEFT); 

     ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>(); 
     dataSets.add(set1); 

     LineData lineData = new LineData(dataSets); 
     chart.setData(lineData); 
     chart.invalidate(); 
    } 

chart_activity_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    <!--android:orientation="horizontal"--> 
    android:orientation="vertical" 
    xmlns:fab="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.example.asd.app.ChartActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/chart_activity_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <com.github.mikephil.charting.charts.LineChart 
     android:id="@+id/line_chart_fuel_usage" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

Edit: Он работал после изменения ориентация ориентации к вертикали, но я не знаю, почему диаграмма показывает только значения в одной строке.

Char pic

+0

call chart.invalidate(), чтобы начать рисование – cxphong

ответ

1

Ваша ориентация родителя LinearLayout «s установлен в горизонтальное положение, а ширина AppBarLayout является match_parent, так что нет больше места, чтобы нарисовать диаграмму.

Попробуйте изменить родительскую ориентацию на vertical.

EDIT

Для вашего 2-го выпуска:

Кажется дату был transofmed в поплавка (2016.0) и ваши данные случится иметь один и тот же префикс (2016-0 ...).

Что вы можете сделать, это положить все свои значения по оси X в String[] и при вставке запись сделать это нравится: values.add(new Entry(i, y_fuel_usage[i]));

затем используйте IAxisValueFormatter переопределяют значения XAxis:

IAxisValueFormatter formatter = new IAxisValueFormatter() { 
     @Override 
     public String getFormattedValue(float value, AxisBase axis) { 
      return yourStringArray[(int)value]; 
     } 
    }; 

набор для XAxis:

yourChart.getXAxis().setValueFormatter(formatter); 

Хотя я не тестировал этот код выше, я использовал подобный в прошлом и работал d хорошо.

+0

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

+0

Это работает! Большое спасибо! – relliz