0. gradle 환경 설정은 필수.
1.RegisterActivity와 MainActivity(로그인 액티비티)에 다음 문구를 추가한다.
hashMap.put("ChartValues",""); // will add later


2. fragment_calendar.xml 레이아웃을 다음과 같이 짜준다.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CalendarFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white">
<Button
android:id="@+id/insertBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Insert"
android:textColor="@color/black" />
<EditText
android:id="@+id/xTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="X축"
android:textColor="@color/black"
android:textColorHint="@color/black"
android:gravity="center"/>
<EditText
android:id="@+id/yTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Y축"
android:textColor="@color/black"
android:textColorHint="@color/black"
android:gravity="center"/>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/lineChartView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.github.mikephil.charting.charts.LineChart>
</LinearLayout>
</FrameLayout>

3. DataPoint 클래스를 만들어준다.
public class DataPoint {
int xValue, yValue;
public DataPoint(int xValue, int yValue) {
this.xValue = xValue;
this.yValue = yValue;
}
public DataPoint(){
}
public int getxValue() {
return xValue;
}
public int getyValue() {
return yValue;
}
}
4. CalendarFragment에서 다음과 같은 작업을 해준다.
FirebaseAuth firebaseAuth;
FirebaseUser user;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference, ref2;
Button insertBtn;
EditText xValue, yValue;
LineChart lineChart;
LineDataSet lineDataSet = new LineDataSet(null,null);
ArrayList<ILineDataSet> iLineDataSets = new ArrayList<>();
LineData lineData;
String id;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_calendar, container, false);
super.onCreate(savedInstanceState);
insertBtn = v.findViewById(R.id.insertBtn);
xValue=v.findViewById(R.id.xTextView);
yValue=v.findViewById(R.id.yTextView);
lineChart = v.findViewById(R.id.lineChartView);
//init firebase
firebaseAuth = FirebaseAuth.getInstance();
user = firebaseAuth.getCurrentUser();
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference("Users");
ref2 = databaseReference.child(user.getUid());
retrieveData();
insertData();
return v;
}
ref2를 만들어준 이유
Path "Users" 안에 있는 여러 UID들 중에서 현재 유저와 같은 UID인 것을 고르기 위해서.

onCreatView 안에 retrieveData()가 들어간 이유
retrieve 뜻은 '(정보를)검색하다' 라는 뜻.
화면을 열었을 때 이전에 있던 정보를 검색하여 그래프를 화면에 띄우기 위해 넣었다.
insertData()
private void insertData(){
insertBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
id = ref2.child("ChartValues").push().getKey();
int x = Integer.parseInt(xValue.getText().toString());
int y = Integer.parseInt(yValue.getText().toString());
DataPoint dataPoint = new DataPoint(x,y);
ref2.child("ChartValues").child(id).setValue(dataPoint);
retrieveData();
}
});
}
retreiveData()
private void retrieveData(){
ref2.child("ChartValues").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
ArrayList<Entry>dataVals = new ArrayList<Entry>();
if(snapshot.hasChildren()){
for (DataSnapshot ds : snapshot.getChildren()){
//get data
DataPoint dataPoint = ds.getValue(DataPoint.class);
dataVals.add(new Entry(dataPoint.getxValue(),dataPoint.getyValue()));
}
showChart(dataVals);
} else {
lineChart.clear();
lineChart.invalidate();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
showChart()
private void showChart(ArrayList<Entry> dataVals){
lineDataSet.setValues(dataVals);
lineDataSet.setLabel("Dataset 1");
iLineDataSets.clear();
iLineDataSets.add(lineDataSet);
lineData = new LineData(iLineDataSets);
lineChart.clear();
lineChart.setData(lineData);
lineChart.invalidate();
}

'안드로이드 노트' 카테고리의 다른 글
[안드로이드][프로젝트1]SharedPreferences를 이용하여 인트로 화면에서 바로 홈으로 넘어가기 (0) | 2022.03.26 |
---|---|
[안드로이드][프로젝트1] 내가 MPAndroid X axis 값을 날짜와 시간으로 변환한 방법(firebase 연동) (0) | 2022.03.24 |
[안드로이드][프로젝트1] MPAndroidChart를 활용한 LineChart 사용 (0) | 2022.03.23 |
[프로젝트1] DeleteAccount한 방법 (0) | 2022.03.22 |
[프로젝트1] 내가 로그인Activity를 구현한 방법 (0) | 2022.03.21 |