다름이 아니라 앱을 사용하다가 강제 종료하게 되면 onDestroy을 실행시켜서 카운팅하던 데이터를 DB에 더해주도록 하고 싶습니다.
이를 위해 onDestory에 데이터를 읽어오고 이를 다시 쓰는 코드를 작성하였는데요, onDestory의 다른 코드들은 잘 동작하지만 DB에서 읽어오고 다시 쓰는 코드는 동작하지 않습니다.
혹시 onDestroy에서 DB의 데이터를 읽어오도록 할 수 있을까요?
현재 DB는 Firebase를 사용하였으며, 강제 종료 시에 서비스를 통해 onDestroy를 동작하도록 하였습니다.
위의 문제를 해결할 수 있거나 강제종료 시 DB의 데이터를 읽을 수 있는 방법을 알고 싶습니다!
@Override
public void onDestroy() {
super.onDestroy();
updateCountBall();
sendData("0,0,0,0");
Log.i(TAG, "Destroy 실행");
}
public void updateCountBall(){
SimpleDateFormat dtf = new SimpleDateFormat("yyyyMMdd");
Calendar calendar = Calendar.getInstance();
Date dateObj = calendar.getTime();
String formattedDate = dtf.format(dateObj);
String cnt_str = String.valueOf((int)ball_count);
Log.i(TAG, formattedDate);
Log.i(TAG, "update Count Ball");
databaseReference.child("users").child(uid).child("ballCount").child(formattedDate).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if(!task.isSuccessful()){
Log.i(TAG, "failed");
}
else{
String res = String.valueOf(task.getResult().getValue());
if(res.equals("null")){
databaseReference.child("users").child(uid).child("ballCount").child(formattedDate).setValue(cnt_str);
Log.i(TAG, "null");
}
else{
Log.i(TAG, "task");
Log.i(TAG, "테스크: " + String.valueOf(task.getResult().getValue()));
int res_cnt = Integer.parseInt(String.valueOf(task.getResult().getValue()));
res_cnt += (int)ball_count;
databaseReference.child("users").child(uid).child("ballCount").child(formattedDate).setValue(String.valueOf(res_cnt));
}
}
ball_count = 0.5;
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i(TAG, "onFailure: "+e.getMessage());
}
});
}