Reactive Programming on Android with RxJava



Download 1,47 Mb.
Pdf ko'rish
bet59/60
Sana20.04.2022
Hajmi1,47 Mb.
#566724
1   ...   52   53   54   55   56   57   58   59   60
Bog'liq
reactiveandroid

public class
Message
{
2
private
String sender
;
3
private
String receiver
;
4
private
String text
;
5
6
public
Message
(
String sender
,
String receiver
,
String text
) {
7
this
.
sender
=
sender
;
8
this
.
receiver
=
receiver
;
9
this
.
text
=
text
;
10
}
11
}
12
13
public class
NetworkClient
{
14
15
Observable
<
Message
>
sendMessage
(
Message message
) {
16
// Send message network call here
17
}
18
}
Above, we have a simple
Message
POJO that contains some text as well as the sender and the receiver
of the message. In addition, we’ve added a method in
NetworkClient
to send a
Message
to the
receiver which returns an
Observable
that emits the sent message to the observer if the
network call succeeds, otherwise, it emits an error.
1
Message message
=
new
Message
(
"chris, "
angus
", "
Yo
"
);
2
networkClient
.
sendMessage
(
message
).
subscribe
(() -> {
3
// Message sending succeeds
4
},
throwable
-> {
5
// Message sending fails
6
});
Observable.retry()
A straightforward approach to retry a failed operation is to use
.retry()
.
.retry()
will intercept
error notifications received upstream and not pass those through its observers. Instead, it will
resubscribe to the source
Observable
and give it the opportunity to complete its sequence without
error.


Chapter 7: Error Handling
99
Marble diagram of .retry()
1
Message message
=
new
Message
(
"chris, "
angus
", "
Yo
"
);
2
networkClient
.
sendMessage
(
message
).
retry
(10).
subscribe
(() -> {
3
// Message sending succeeds
4
},
throwable
-> {
5
// Message sending fails
6
});
Above, we have modified sending a message to retry at most 10 times until it succeeds.
It might also be useful to inspect the error before blindly retrying the operation. For example, say
the error returned is because the user that is trying to send a message is no longer authenticated. In
this case, we do not want to retry the operation but instead report the error to the observer. To do
this, we can use an overloaded version of
.retry()
which allows us to pass a predicate to inspect
the error to retry conditionally.
1
networkClient
.
sendMessage
(
message
).
retry
(10,
error
-> {
2
return
!(
error
instanceof
AuthenticationError
);
3
}).
subscribe
(() -> {
4
// Message sending succeeds
5
},
throwable
-> {
6
// Message sending fails
7
});
While retrying an operation immediately after failure a number of times may be sufficient in some
cases, in others cases such as network issues, retrying immediately can exacerbate the issue and a
different approach for retrying is necessary.


Chapter 7: Error Handling
100

Download 1,47 Mb.

Do'stlaringiz bilan baham:
1   ...   52   53   54   55   56   57   58   59   60




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish