Отображение даты как оси X в графическом представлении не работает (отображение всегда одинаково) - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь создать график в виде графика, который отображает на осях X и Y - целое число. Данные хранятся в базе данных sqlite. Вот мой DatabaseHelper.java файл:

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="records.db";
    public static final String TABLE_NAME="records_table";
    public static final String COL_1="date";
    public static final String COL_2="percentage";

    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "(date DATE,percentage INTEGER)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public void insertData(Integer percentage){
        SQLiteDatabase db= this.getWritableDatabase();
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
        Date date = new Date();
        ContentValues initialValues = new ContentValues();
        initialValues.put("date", dateFormat.format(date));
        initialValues.put("percentage",percentage);
        long rowId = db.insert(TABLE_NAME, null, initialValues);

    }
}

А вот файл, в котором отображается график, Statistics.java:

public class Statistics extends AppCompatActivity {
    SQLiteDatabase db;

    GraphView graphView;
    LineGraphSeries<DataPoint> series = new LineGraphSeries<>(new DataPoint[0]);
    SimpleDateFormat sdf=new SimpleDateFormat("MM-dd");



    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_statistics);
        graphView= (GraphView) findViewById(R.id.graph);
        graphView.addSeries(series);
        graphView.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter(){
            @Override
            public String formatLabel(double value,boolean isValueX){
                if (isValueX){
                    return sdf.format(new Date((long) value));
                } else {
                    return super.formatLabel(value,isValueX);
                }
            }
        });
        series.resetData(getDataPoint());
        exqInsert();
    }

    private void exqInsert() {
        series.resetData(getDataPoint());
        graphView.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter(){
            @Override
            public String formatLabel(double value,boolean isValueX){
                if (isValueX){
                    return sdf.format(new Date((long) value));
                } else {
                    return super.formatLabel(value,isValueX);
                }
            }
        });
    }

    @SuppressLint("WrongConstant")
    private DataPoint[] getDataPoint() {
        String[] columns= {"date","percentage"};
        db = openOrCreateDatabase("records.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
        Cursor cursor=db.query("records_table",columns,null,null,null,null,null);
        DataPoint[] dp=new DataPoint[cursor.getCount()];

        for (int i=0 ; i<cursor.getCount(); i++){
            cursor.moveToNext();
            dp[i]= new DataPoint(cursor.getLong(0),cursor.getInt(1));
        }

        return dp;
    }

}

Данные в моей базе данных records.db следующее:

enter image description here

Но график, который я получаю, таков:

enter image description here

Что я делаю не так? Как я могу это исправить?

1 Ответ

0 голосов
/ 19 марта 2020

Вы используете форматирующий ярлык, используемый для отображения валют, как показано ниже:

graphView.getGridLabelRenderer (). SetLabelFormatter (new DefaultLabelFormatter ()

Я предлагаю попробовать использовать это метка форматера для даты как XAxis

graphView
.getGridLabelRenderer()
.setLabelFormatter(new DateAsXAxisLabelFormatter(GraphActivity.this, new SimpleDateFormat(getResources().getString(R.string.graph_date_format))));
...