Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android RxJava ʵս½²½â£ºÓÅÑÅʵÏÖ ÍøÂçÇëÇóÂÖѯ
 
À´Ô´£º²©¿Í ·¢²¼ÓÚ£º 2017-10-24
  2966  次浏览      27
 

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µÄ°²×¿¿ª·¢±Ê¼Ç£¡£¡

 

   
2966 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì