본문 바로가기

Programming/Android

Kotlin 사용 (1) - singleton (Rx EventBus용)

Otto나 GreenRobot같은 라이브러리를 이용할 수도 있지만,


Rx로도 충분히 구현이 가능하기 때문에(Otto는 Rx가 나오고 중단된 걸로 알고있음)


기존 자바 클래스

public class PerformanceEventBus {

public static final PerformanceEventBus instance = new PerformanceEventBus();
private BehaviorSubject<Long> performanceIdSubject = BehaviorSubject.create();

public PerformanceEventBus(){

}

public static PerformanceEventBus getInstance() {
return instance;
}

public void setPerformanceId(long performanceId){
performanceIdSubject.onNext(performanceId);
}

public Observable<Long> getPerformanceId(){
return performanceIdSubject;
}

}


코틀린 클래스

object TeamEventBus {
private var teamIdSubject: BehaviorSubject<Long> = BehaviorSubject.create()

fun setTeamId(teamId: Long){
teamIdSubject.onNext(teamId)
}

fun getTeamId(): Observable<Long>{
return teamIdSubject
}
}

싱글톤으로 사용할 경우 클래스가 아닌 object로 하고, 굳이 생성자는 필요x



teamId를 set할 때

TeamEventBus.INSTANCE.setTeamId(0L);

teamId를 get할 때(Rx)

TeamEventBus.INSTANCE.getTeamId()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.unsubscribeOn(Schedulers.io())
.subscribe(teamId -> {
this.teamId = teamId;
BPTeam team = BPTeam.findTeamWhereTeamId(this.teamId);
/** Realm 팀 정보가 있는 경우 (업데이트) */
if (team != null) {
if (teamNameEditText != null)
teamNameEditText.setText(team.getName());
if (descriptionEditText != null)
descriptionEditText.setText(team.getDescription());
if (agreeCheckBox != null)
agreeCheckBox.setChecked(team.isUsesMr());
isUpdate = true;
}
}, e -> {
Logger.d(Error.getThrowable(e));
Logger.d(BPApplication.getCrashDeviceInfo());
});

아마 자바로 했으면 TeamEventBus.getInstance().getTeamId() 이런식으로 진행될 것

'Programming > Android' 카테고리의 다른 글

Kotlin 사용 (2) - Custom TextView (letter spacing)  (0) 2017.06.15
Kotlin 사용시 주의사항?  (0) 2017.05.30
Kotlin 설치  (0) 2017.05.20
Realm 과 Jack Option  (0) 2017.05.19
Glide Svg 이미지관련  (0) 2017.05.19