如何使用 MPAndroidChart 库将浮点数据从 firebase 转换为图表的日期数据

How to convert float data from firebase to date data for chart using MPAndroidChart library

我是 android 开发的新手,我在将浮动数据从 Firebase Firestore 转换为最新时遇到问题。我希望使用 MPAndroidChart 库将此日期数据显示在图表中。 自定义class有weightdate两个变量。我希望用户在可编辑文本中写下他自己的当前体重,并在按下按钮后将体重和当前日期保存在 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);
      }
 });