1.Rxjava£¬ÓÉÓÚÆä»ùÓÚʼþÁ÷µÄÁ´Ê½µ÷Óá¢Âß¼¼ò½à
& ʹÓüòµ¥µÄÌØµã£¬ÉîÊܸ÷´ó Android¿ª·¢Õߵ϶ӡ£
2.RxJavaÈç´ËÊÜ»¶ÓµÄÔÒò£¬ÔÚÓÚÆäÌṩÁ˷ḻ & ¹¦ÄÜÇ¿´óµÄ²Ù×÷·û£¬¼¸ºõÄÜÍê³ÉËùÓеŦÄÜÐèÇó
3.½ñÌ죬ÎÒ½«Îª´ó¼Ò´øÀ´ Rxjava´´½¨²Ù×÷·ûµÄ³£¼û¿ª·¢Ó¦Óó¡¾°£ºÂÖѯÐèÇó
£¬²¢½áºÏRetrofit ÓëRxJava ʵÏÖ£¬Ï£Íû´ó¼Ò»áϲ»¶¡£
1.±¾ÏµÁÐÎÄÕÂÖ÷Òª»ùÓÚ Rxjava 2.0
2.½ÓÏÂÀ´µÄʱ¼ä£¬ÎÒ½«³ÖÐøÍÆ³ö AndroidÖÐ Rxjava 2.0
µÄһϵÁÐÎÄÕ£¬°üÀ¨ÔÀí¡¢²Ù×÷·û¡¢Ó¦Óó¡¾°¡¢±³Ñ¹µÈµÈ £¬ÓÐÐËȤ¿ÉÒÔ¼ÌÐø¹Ø×¢Carson_HoµÄ°²×¿¿ª·¢±Ê¼Ç£¡

Ŀ¼

1. ÐèÇ󳡾°

×¢£º¹ØÓÚ RxjavaÖеÄÑÓʱ´´½¨²Ù×÷·ûinterval£¨£© ºÍ
intervalRange£¨£©µÄʹÓÃÇë¿´ÎÄÕÂAndroid RxJava£º×î»ù´¡µÄ²Ù×÷·ûÏê½â - ´´½¨²Ù×÷·û
2. ¹¦ÄÜ˵Ã÷
±¾ÎĽ«²ÉÓÃGet·½·¨¶Ô ½ðɽ´Ê°ÔAPI °´¹æ¶¨Ê±¼ä ÖØ¸´·¢ËÍÍøÂçÇëÇ󣬴ӶøÄ£Äâ ÂÖѯ ÐèÇóʵÏÖ
²ÉÓà Gson ½øÐÐÊý¾Ý½âÎö

3. ¾ßÌåʵÏÖ
ÏÂÃæÎÒ½«½áºÏ Retrofit ÓëRxJava ʵÏÖÂÖѯÐèÇó
3.1 ²½Öè˵Ã÷
1.Ìí¼ÓÒÀÀµ
2.´´½¨ ½ÓÊÕ·þÎñÆ÷·µ»ØÊý¾Ý µÄÀà
3.´´½¨ ÓÃÓÚÃèÊöÍøÂçÇëÇó µÄ½Ó¿Ú£¨Çø±ðÓÚ´«Í³RetrofitÐÎʽ£©
4.´´½¨ Retrofit ʵÀý
5.´´½¨ ÍøÂçÇëÇó½Ó¿ÚʵÀý ²¢ ÅäÖÃÍøÂçÇëÇó²ÎÊý£¨Çø±ðÓÚ´«Í³RetrofitÐÎʽ£©
6.·¢ËÍÍøÂçÇëÇó£¨Çø±ðÓÚ´«Í³RetrofitÐÎʽ£©
7.·¢ËÍÍøÂçÇëÇó
8.¶Ô·µ»ØµÄÊý¾Ý½øÐд¦Àí
±¾ÊµÀý²àÖØÓÚ˵Ã÷ RxJava µÄÂÖѯÐèÇ󣬹ØÓÚRetrofitµÄʹÓÃÇë¿´ÎÄÕ£ºÕâÊÇÒ»·ÝºÜÏêϸµÄ Retrofit
2.0 ʹÓý̳̣¨º¬ÊµÀý½²½â£©
3.2 ²½ÖèʵÏÖ
²½Öè1£º Ìí¼ÓÒÀÀµ
a. ÔÚ Gradle¼ÓÈëRetrofit¿âµÄÒÀÀµ
dependencies
{
// Android Ö§³Ö Rxjava
// ´Ë´¦Ò»¶¨Òª×¢ÒâʹÓÃRxJava2µÄ°æ±¾
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
// Android Ö§³Ö Retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
// ÏÎ½Ó Retrofit & RxJava
// ´Ë´¦Ò»¶¨Òª×¢ÒâʹÓÃRxJava2µÄ°æ±¾
compile 'com.jakewharton.retrofit:retrofit2
-rxjava2-adapter:1.0.0'
// Ö§³ÖGson½âÎö
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
} |
b. Ìí¼Ó ÍøÂçȨÏÞ
<uses-permission
android:name="android.permission.INTERNET"/> |
²½Öè2£º´´½¨ ½ÓÊÕ·þÎñÆ÷·µ»ØÊý¾Ý µÄÀà
½ðɽ´Ê°ÔAPI µÄÊý¾Ý¸ñʽ˵Ã÷ÈçÏ£º
//
URLÄ£°å
http://fy.iciba.com/ajax.php
// URLʵÀý
http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world
// ²ÎÊý˵Ã÷£º
// a£º¹Ì¶¨Öµ fy
// f£ºÔÎÄÄÚÈÝÀàÐÍ£¬ÈÕÓïÈ¡ ja£¬ÖÐÎÄÈ¡ zh£¬
Ó¢ÓïÈ¡ en£¬º«ÓïÈ¡ ko£¬µÂÓïÈ¡ de£¬Î÷°àÑÀÓïÈ¡
es£¬·¨ÓïÈ¡ fr£¬×Ô¶¯ÔòÈ¡ auto
// t£ºÒëÎÄÄÚÈÝÀàÐÍ£¬ÈÕÓïÈ¡ ja£¬ÖÐÎÄÈ¡ zh£¬Ó¢ÓïÈ¡
en£¬º«ÓïÈ¡ ko£¬µÂÓïÈ¡ de£¬Î÷°àÑÀÓïÈ¡ es£¬·¨ÓïÈ¡
fr£¬×Ô¶¯ÔòÈ¡ auto
// w£º²éѯÄÚÈÝ |
ʾÀý

¸ù¾Ý ½ðɽ´Ê°ÔAPI µÄÊý¾Ý¸ñʽ£¬´´½¨ ½ÓÊÕ·þÎñÆ÷·µ»ØÊý¾Ý µÄÀࣺ
public
class Translation {
private int status;
private content content;
private static class content {
private String from;
private String to;
private String vendor;
private String out;
private int errNo;
}
//¶¨Òå Êä³ö·µ»ØÊý¾Ý µÄ·½·¨
public void show() {
Log.d("RxJava", content.out );
}
} |
²½Öè3£º´´½¨ ÓÃÓÚÃèÊöÍøÂçÇëÇó µÄ½Ó¿Ú
²ÉÓà ע½â + Observable<...>½Ó¿ÚÃèÊö ÍøÂçÇëÇó²ÎÊý
public
interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hi%20world")
Observable<Translation> getCall();
// ×¢½âÀï´«Èë ÍøÂçÇëÇó µÄ²¿·ÖURLµØÖ·
// Retrofit°ÑÍøÂçÇëÇóµÄURL·Ö³ÉÁËÁ½²¿·Ö£º
Ò»²¿·Ö·ÅÔÚRetrofit¶ÔÏóÀÁíÒ»²¿·Ö·ÅÔÚÍøÂçÇëÇó½Ó¿ÚÀï
// Èç¹û½Ó¿ÚÀïµÄurlÊÇÒ»¸öÍêÕûµÄÍøÖ·£¬ÄÇô·ÅÔÚ
Retrofit¶ÔÏóÀïµÄURL¿ÉÒÔºöÂÔ
// ²ÉÓÃObservable<...>½Ó¿Ú
// getCall()ÊǽÓÊÜÍøÂçÇëÇóÊý¾ÝµÄ·½·¨
} |
½ÓÏÂÀ´µÄ²½Öè¾ùÔÚRxJavafixRxjava.javaÄÚʵÏÖ£¨Çë¿´×¢ÊÍ£©
public
class RxJavafixRxjava extends AppCompatActivity
{
private static final String TAG = "Rxjava";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* ²½Öè1£º²ÉÓÃinterval£¨£©ÑÓ³Ù·¢ËÍ
* ×¢£º´Ë´¦Ö÷ҪչʾÎÞÏÞ´ÎÂÖѯ£¬ÈôҪʵÏÖÓÐÏÞ´ÎÂÖѯ£¬
½öÐ轫interval£¨£©¸Ä³ÉintervalRange£¨£©¼´¿É
**/
Observable.interval(2,1, TimeUnit.SECONDS)
// ²ÎÊý˵Ã÷£º
// ²ÎÊý1 = µÚ1´ÎÑÓ³Ùʱ¼ä£»
// ²ÎÊý2 = ¼ä¸ôʱ¼äÊý×Ö£»
// ²ÎÊý3 = ʱ¼äµ¥Î»£»
// ¸ÃÀý×Ó·¢Ë͵ÄʼþÌØµã£ºÑÓ³Ù2sºó·¢ËÍʼþ£¬
ÿ¸ô1Ãë²úÉú1¸öÊý×Ö£¨´Ó0¿ªÊ¼µÝÔö1£¬ÎÞÏÞ¸ö£©
/*
* ²½Öè2£ºÃ¿´Î·¢ËÍÊý×Öǰ·¢ËÍ1´ÎÍøÂçÇëÇó£¨doOnNext£¨£©
ÔÚÖ´ÐÐNextʼþǰµ÷Óã©
* ¼´Ã¿¸ô1Ãë²úÉú1¸öÊý×Öǰ£¬¾Í·¢ËÍ1´ÎÍøÂçÇëÇó£¬
´Ó¶øÊµÏÖÂÖѯÐèÇó
**/
.doOnNext(new Consumer<Long>() {
@Override
public void accept(Long integer) throws Exception
{
Log.d(TAG, "µÚ " + integer + "
´ÎÂÖѯ" );
/*
* ²½Öè3£ºÍ¨¹ýRetrofit·¢ËÍÍøÂçÇëÇó
**/
// a. ´´½¨Retrofit¶ÔÏó
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") //
ÉèÖÃ ÍøÂçÇëÇó Url
.addConverterFactory(GsonConverterFactory.create())
//ÉèÖÃʹÓÃGson½âÎö(¼ÇµÃ¼ÓÈëÒÀÀµ)
.addCallAdapterFactory(RxJava2CallAdapterFactory.
create()) // Ö§³ÖRxJava
.build();
// b. ´´½¨ ÍøÂçÇëÇó½Ó¿Ú µÄʵÀý
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
// c. ²ÉÓÃObservable<...>ÐÎʽ ¶Ô ÍøÂçÇëÇó ½øÐзâ×°
Observable<Translation> observable = request.getCall();
// d. ͨ¹ýÏß³ÌÇл»·¢ËÍÍøÂçÇëÇó
observable.subscribeOn(Schedulers.io()) //
Çл»µ½IOÏ߳̽øÐÐÍøÂçÇëÇó
.observeOn(AndroidSchedulers.mainThread()) //
Çл»»Øµ½Ö÷Ïß³Ì ´¦ÀíÇëÇó½á¹û
.subscribe(new Observer<Translation>()
{
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Translation result) {
// e.½ÓÊÕ·þÎñÆ÷·µ»ØµÄÊý¾Ý
result.show() ;
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "ÇëÇóʧ°Ü");
}
@Override
public void onComplete() {
}
});
}
}).subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Long value) {
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "¶ÔErrorʼþ×÷³öÏìÓ¦");
}
@Override
public void onComplete() {
Log.d(TAG, "¶ÔCompleteʼþ×÷³öÏìÓ¦");
}
});
}
}
|
3.3 ²âÊÔ½á¹û
;
4. DemoµØÖ·
Carson_HoµÄGithubµØÖ·
= RxJava2ʵսϵÁУºÂÖѯ
|
5. ×ܽá
±¾ÎÄÖ÷Òª½²½âÁË Rxjava´´½¨²Ù×÷·ûµÄʵ¼Ê¿ª·¢ÐèÇ󳡾°£ºÂÖѯÐèÇó £¬²¢½áºÏRetrofit ÓëRxJava
ʵÏÖ
½ÓÏÂÀ´µÄʱ¼ä£¬ÎÒ½«³ÖÐøÍÆ³ö AndroidÖÐ Rxjava 2.0
µÄһϵÁÐÎÄÕ£¬°üÀ¨ÔÀí¡¢²Ù×÷·û¡¢Ó¦Óó¡¾°¡¢±³Ñ¹µÈµÈ £¬ÓÐÐËȤ¿ÉÒÔ¼ÌÐø¹Ø×¢Carson_HoµÄ°²×¿¿ª·¢±Ê¼Ç£¡£¡

|