현재 상황은 아이템을 구입하는데
먼저 서버로 구매하고자하는 캐쉬의 해당 가격만큼을 전송하여 내 캐쉬에서 차감을 서버상에서 실시하며
해당 작업이 성공적으로 완료된 경우 특정 리턴값을 받와서 그 값을 비교한 "이후"에 뒤의 작업들을 진행하려 합니다.
먼저 쿠키(캐쉬)를 차감하는 로직입니다.
두 로직은 동일한 클래스에 선언되어있습니다.
/**
*
* 요약 : 컨텐츠의 쿠키(캐쉬)정보를 서버로 보내어 차감처리한 후 결과값을 받아온다.
* @param contentsCookie 해당 컨텐츠의 필요 쿠키수
* @return 성공 실패여부 리턴
*/
private void cookieConsume(final int contentsCookie, final OnCookieConsumeListener listener) {
Runnable cookieConsumeRunnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(LoginUserData.sCookie > contentsCookie) { //현재 가진 쿠키가 컨텐츠 가격보다 높다.
//쿠키 차감 통신 처리 (아직 세부 로직은 작성하지 않았습니다.)
boolean result = ....
listener.onCookieConsumeResult(result); //결과값 리턴
}else { //쿠키가 부족할 경우 fasle 리턴
listener.onCookieConsumeResult(result); //결과값 리턴
}
}
};
Thread th = new Thread(cookieConsumeRunnable);
th.start();
}
위의 로직을 이렇게 사용합니다.
case R.id.contents_popup_bottom_play_Button :
cookieConsume(10, new OnCookieConsumeListener() {
@Override
public void onCookieConsumeResult(final boolean result) {
// TODO Auto-generated method stub
if(result == true) { //결과값이 성공이면 다음 처리
//콘텐츠 재생
}else {
}
}
});
break;
위와 같이 로직을 구성하고 있습니다.
인터페이스 콜백을 이용해서 받게끔 처리하였는데요.
public interface OnCookieConsumeListener {
public void onCookieConsumeResult(boolean result);
}
그런데 위와같이 처리를 하면 결과값을 받고나서 UI 작업을 하려니 Runnable Thread에 종속된 상황이라 UI업데이트를 하자니 아래와 같이 또 RunOnUiThread를 사용해서 또다시 Runnable이 중첩되어 버리는데 동작상의 문제는 없는데
뭔가 더 좋은 방법이 있을거 같아 이렇게 조언을 구합니다.
case R.id.contents_popup_bottom_play_Button :
cookieConsume(10, new OnCookieConsumeListener() {
@Override
public void onCookieConsumeResult(final boolean result) {
// TODO Auto-generated method stub
if(result == true) { //결과값이 성공이면 다음 처리
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//UI처리
//콘텐츠 재생
}
});
}else {
}
}
});