Я пытаюсь показать дату и время на оси X для своей гистограммы. Я получил эти данные из своей базы данных firebase UNIX timestamp. Я пытался преобразовать эту временную метку UNIX в удобочитаемую дату, а затем показать это на моей оси. Насколько мне известно, конструктор BarEntry не поддерживает такие типы данных, как String. Итак, я должен использовать xAxis.setValueFormatter (), чтобы показать дату. Я попытался использовать форматировщик, но это кажется неправильным, так как диаграмма перекрытия и ось X показывают неправильные результаты. Вот мой форматтер:
public class FooFormatter extends ValueFormatter {
private long referenceTimestamp; // minimum timestamp
private DateFormat mDataFormat;
private Date mDate;
public FooFormatter(long referenceTimestamp) {
this.referenceTimestamp = referenceTimestamp;
this.mDataFormat = new SimpleDateFormat( "HH:mm", Locale.ENGLISH );
this.mDate = new Date();
}
@Override
public String getFormattedValue(float value) {
// convertedTimestamp = originalTimestamp - referenceTimestamp
long convertedTimestamp = (long) value;
// Retrieve original timestamp
long originalTimestamp = referenceTimestamp + convertedTimestamp;
// Convert timestamp
return getDateString(originalTimestamp);
}
private String getDateString(long timestamp) {
try {
mDate.setTime(timestamp * 1000);
return mDataFormat.format(mDate);
} catch(Exception ex) {
return "xx";
}
}
}
это мой метод извлечения данных:
public void retrievedata() {
weightReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
int count_test = 1;
ArrayList<BarEntry> dataValue = new ArrayList<BarEntry>();
if(dataSnapshot.hasChildren()){
for (DataSnapshot myDataSnapshot : dataSnapshot.getChildren()){
datapoint DataPoint = myDataSnapshot.getValue(datapoint.class);
originalTimestamp = DataPoint.getDate();
dataValue.add(new BarEntry(originalTimestamp, DataPoint.getValue()));
referenceTimestamp = 1587772800;
convertedTimestamp = originalTimestamp - referenceTimestamp;
}
showChart(dataValue);
} else {
chart.clear();
chart.invalidate();
}
}
и вот как мне использовать форматировщик xAxis:
FooFormatter axisValueFormatter = new FooFormatter(convertedTimestamp);
XAxis xAxis = chart.getXAxis();
xAxis.setValueFormatter(axisValueFormatter);
ресурс: https://github.com/PhilJay/MPAndroidChart/issues/789#issuecomment -241507904