Guest User

Untitled

a guest
Dec 11th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. // Модель ответа от сервера
  2. data class SomeResponse(
  3. @SerializedName("AA") val aa: String?,
  4. @SerializedName("BB") val bb: Int,
  5. @SerializedName("CC") val cc: List<String>?
  6. )
  7.  
  8. // Бизнес модель
  9. data class Some(
  10. val fullName: String,
  11. val age: Int,
  12. val children: List<String>
  13. )
  14.  
  15. class TestFragment() {
  16. val repository = TestRepository()
  17.  
  18. init {
  19. // Эмулируем хороший ответ
  20. repository.getInfoState1()
  21. .subscribe({
  22. // получили нужную модель
  23. }, {
  24. if (it is BadDataResponseException) // обработали так как нам надо
  25. else it.printStackTrace()
  26. })
  27.  
  28. // Эмулируем плохой ответ
  29. repository.getInfoState2()
  30. .subscribe({
  31. // получили нужную модель
  32. }, {
  33. if (it is BadDataResponseException) // обработали так как нам надо
  34. else it.printStackTrace()
  35. })
  36. }
  37. }
  38.  
  39. class TestRepository {
  40. val service = ServerResponse()
  41.  
  42. fun getInfoState1(): Observable<Some> {
  43. return service.getSomeInfoNormal()
  44. .map { response ->
  45. Some(
  46. fullName = response.aa ?: "",
  47. age = response.bb,
  48. children = response.cc ?: emptyList()
  49. )
  50. }
  51. }
  52.  
  53. fun getInfoState2(): Observable<Some> {
  54. return service.getSomeInfoBad()
  55. .map { response ->
  56. Some(
  57. fullName = response.aa ?: throw BadDataResponseException(),
  58. age = response.bb,
  59. children = response.cc ?: emptyList()
  60. )
  61. }
  62. }
  63. }
  64. // Exception которым мы должны пультся в таких ситуациях
  65. class BadDataResponseException : RuntimeException()
  66.  
  67. // Эмуляция ответов от сервера, реализовывать не надо))
  68. class ServerResponse : TestService {
  69. override fun getSomeInfoNormal(): Observable<SomeResponse> {
  70. return Observable.just(SomeResponse("", 0, emptyList()))
  71. }
  72.  
  73. override fun getSomeInfoBad(): Observable<SomeResponse> {
  74. return Observable.just(SomeResponse(null, 0, emptyList()))
  75. }
  76.  
  77. }
  78.  
  79. interface TestService {
  80. @GET("someInfo")
  81. fun getSomeInfoNormal(): Observable<SomeResponse>
  82.  
  83. @GET("someInfo")
  84. fun getSomeInfoBad(): Observable<SomeResponse>
  85. }
Add Comment
Please, Sign In to add comment