Android Programjaim

Android fejlesztes, java, kotlin, web.. miegymas:)

RxAndroid - 2. resz

2016. július 04. 12:47 - lacas82

Action1<String> textViewOnNextAction = new Action1<String>() {
@Override
public void call(String s) {
txtPart1.setText(s);
}
};


Kezdjunk is bele! Az Action1 tulajdonkeppen egy hivas/tortenes,
ami nyilvan ismeros lehet ha irtunk mar interface-t generikusan. Ez itt 
egy hivas, ami visszaad egy Stringet esetunkben, de persze a String barmi mar lehet. 


Eddig ugye ezt hasznaltuk arra, hogy a textView-be visszakapjuk a "Hello World"-ot.
De mi van, ha nem a Hello World-ot akarjuk, hanem nagybetukkel a HELLO WORLD-ot?

Akkor letre kell hoznunk egy Func1 nevu metodust:

Func1<String, String> toUpperCaseMap = new Func1<String, String>(){
@Override
public String call(String s) {
return s.toUpperCase();
}
};

Ez ugye nagybetuve alakitja siman, ez egy map lesz. A ket String az input, outputot szimbolizalja.

Nezzuk egyszerubben az Observables-unket:

Observable<String> singleObservable = Observable.just(“Hello, World!”);


Lehetosegunk van a "just" statikus metodust meghivni, ami siman egy shortcut a "Hello World"-re.


Majd osszedrotozzuk:

singleObservable.observeOn(AndroidSchedulers.mainThread())
.map(toUpperCaseMap)
.subscribe(textViewOnNextAction);

 

Az uj dolog itt a map operator! Mi ez? Mielott atdobnank az eredmenyt a subscribernek, meg elvegezzuk rajta a

szukseges modositast, azaz nagybetusse alakitjuk. Majd ezt adjuk vissza. Nagyon sok operator erheto el, ezt egyelore ne is ragozzuk.


Eddig azt lattuk, hogyan lehet egy elemet atadni, de akarmennyit lehet, lassunk peldat List-ekre is mondjuk.

Action1<String> toastOnNextAction = new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(context, s, Toast.LENGTH_SHORT).show();
}
};

Eddig semmi uj dolog...
Observable<String> oneByOneObservable = Observable.from(manyWords);


vagy

Observable.just(manyWordList);

flatMap

Func1<List<String>, Observable<String>> getUrls = new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call (List<String> strings) {
return Observable.from(strings);
}
};

Func2<String, String, String> mergeRoutine = new Func2<String, String, String>() {
@Override
public String call (String s, String s1) {
return String.format(“%s %s”,s, s1);
}
};

Observable.just(manyWordList)
.observeOn(AndroidSchedulers.mainThread())
.flatMap(getUrls)
.reduce(mergeRoutine)
.subscribe(toastOnNextAction);


Teljes forraskod
Címkék: RxAndroid