如何使用 MPAndroidChart 库将浮点数据从 firebase 转换为图表的日期数据
How to convert float data from firebase to date data for chart using MPAndroidChart library
我是 android 开发的新手,我在将浮动数据从 Firebase Firestore 转换为最新时遇到问题。我希望使用 MPAndroidChart 库将此日期数据显示在图表中。
自定义class有weight和date两个变量。我希望用户在可编辑文本中写下他自己的当前体重,并在按下按钮后将体重和当前日期保存在 Firebase Firestore 数据库中。然后我要保存的数据显示在折线图中。
正如你在我的数据库截图中看到的那样Firebase Firestore flaot 中有日期变量。主要问题是我不知道如何将该浮点变量转换为 SimpleDataFormat (dd/MM)
这是片段
public class ReportFragment extends Fragment {
private ArrayList<Entry> weightDateList;
private LineChart mWeightChart;
private Button btnWeight;
private EditText inputWeight;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private static final String TAG = "ReportFragment";
private Date today = new Date(System.currentTimeMillis());
private final SimpleDateFormat mFormat = new SimpleDateFormat("dd/MM");
public ReportFragment() {}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_report, container, false);
mWeightChart = view.findViewById(R.id.weight_chart);
btnWeight = view.findViewById(R.id.add_weight);
inputWeight = view.findViewById(R.id.input_weight);
XAxis xWeightAxis = mWeightChart.getXAxis();
xWeightAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float dateWeight) {
return mFormat.format(dateWeight);
}
});
db.collection("WeightChartData").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if(e != null) {
Log.d(TAG, "onWeightEvent: " + e.getMessage());
return;
}
weightDateList = new ArrayList<Entry>();
for(QueryDocumentSnapshot weightDoc : queryDocumentSnapshots) {
if(weightDoc.exists()) {
WeightDateData weightData = weightDoc.toObject(WeightDateData.class);
weightDateList.add(new Entry(weightData.getWeight(), weightData.getDateWeight()));
}
}
}
});
LineDataSet weightDataSet = new LineDataSet(weightDateList, "WeightGraph");
LineData weightData = new LineData(weightDataSet);
mWeightChart.setData(weightData);
btnWeight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveWeight();
}
});
return view;
}
public void saveWeight() {
float weight = Float.valueOf(inputWeight.getText().toString());
float dateWeight = Float.valueOf(today.getTime());
WeightDateData weightData = new WeightDateData(weight, dateWeight);
db.collection("WeightChartData").document().set(weightData).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getActivity(), "Input weight was success", Toast.LENGTH_SHORT).show();
}
});
}
}
我希望这个示例能帮助解决这个问题。谢谢大家!
我没有尝试此代码。如果有错误,您会修复它。
ArrayList<WeightDateData> list = new ArrayList<WeightDateData>();
XAxis xWeightAxis = mWeightChart.getXAxis();
xWeightAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value) {
if(value < 0 || value > list.size() -1)
return "";
return mFormat.format(list.get((int)value).getDateWeight());
}
});
int i = -1;
db.collection("WeightChartData").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if(e != null) {
Log.d(TAG, "onWeightEvent: " + e.getMessage());
return;
}
weightDateList = new ArrayList<Entry>();
for(QueryDocumentSnapshot weightDoc : queryDocumentSnapshots) {
if(weightDoc.exists()) {
WeightDateData weightData = weightDoc.toObject(WeightDateData.class);
list.add(weightData)
i++;
weightDateList.add(new Entry(i, weightData.getWeight()));
}
}
LineDataSet weightDataSet = new LineDataSet(weightDateList, "WeightGraph");
LineData weightData = new LineData(weightDataSet);
mWeightChart.setData(weightData);
}
});
我是 android 开发的新手,我在将浮动数据从 Firebase Firestore 转换为最新时遇到问题。我希望使用 MPAndroidChart 库将此日期数据显示在图表中。 自定义class有weight和date两个变量。我希望用户在可编辑文本中写下他自己的当前体重,并在按下按钮后将体重和当前日期保存在 Firebase Firestore 数据库中。然后我要保存的数据显示在折线图中。
正如你在我的数据库截图中看到的那样Firebase Firestore flaot 中有日期变量。主要问题是我不知道如何将该浮点变量转换为 SimpleDataFormat (dd/MM)
这是片段
public class ReportFragment extends Fragment {
private ArrayList<Entry> weightDateList;
private LineChart mWeightChart;
private Button btnWeight;
private EditText inputWeight;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private static final String TAG = "ReportFragment";
private Date today = new Date(System.currentTimeMillis());
private final SimpleDateFormat mFormat = new SimpleDateFormat("dd/MM");
public ReportFragment() {}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_report, container, false);
mWeightChart = view.findViewById(R.id.weight_chart);
btnWeight = view.findViewById(R.id.add_weight);
inputWeight = view.findViewById(R.id.input_weight);
XAxis xWeightAxis = mWeightChart.getXAxis();
xWeightAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float dateWeight) {
return mFormat.format(dateWeight);
}
});
db.collection("WeightChartData").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if(e != null) {
Log.d(TAG, "onWeightEvent: " + e.getMessage());
return;
}
weightDateList = new ArrayList<Entry>();
for(QueryDocumentSnapshot weightDoc : queryDocumentSnapshots) {
if(weightDoc.exists()) {
WeightDateData weightData = weightDoc.toObject(WeightDateData.class);
weightDateList.add(new Entry(weightData.getWeight(), weightData.getDateWeight()));
}
}
}
});
LineDataSet weightDataSet = new LineDataSet(weightDateList, "WeightGraph");
LineData weightData = new LineData(weightDataSet);
mWeightChart.setData(weightData);
btnWeight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveWeight();
}
});
return view;
}
public void saveWeight() {
float weight = Float.valueOf(inputWeight.getText().toString());
float dateWeight = Float.valueOf(today.getTime());
WeightDateData weightData = new WeightDateData(weight, dateWeight);
db.collection("WeightChartData").document().set(weightData).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getActivity(), "Input weight was success", Toast.LENGTH_SHORT).show();
}
});
}
}
我希望这个示例能帮助解决这个问题。谢谢大家!
我没有尝试此代码。如果有错误,您会修复它。
ArrayList<WeightDateData> list = new ArrayList<WeightDateData>();
XAxis xWeightAxis = mWeightChart.getXAxis();
xWeightAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value) {
if(value < 0 || value > list.size() -1)
return "";
return mFormat.format(list.get((int)value).getDateWeight());
}
});
int i = -1;
db.collection("WeightChartData").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if(e != null) {
Log.d(TAG, "onWeightEvent: " + e.getMessage());
return;
}
weightDateList = new ArrayList<Entry>();
for(QueryDocumentSnapshot weightDoc : queryDocumentSnapshots) {
if(weightDoc.exists()) {
WeightDateData weightData = weightDoc.toObject(WeightDateData.class);
list.add(weightData)
i++;
weightDateList.add(new Entry(i, weightData.getWeight()));
}
}
LineDataSet weightDataSet = new LineDataSet(weightDateList, "WeightGraph");
LineData weightData = new LineData(weightDataSet);
mWeightChart.setData(weightData);
}
});