Rxjava+Retrofit的使用实例(基于retrofit2.1.0)
生活随笔
收集整理的這篇文章主要介紹了
Rxjava+Retrofit的使用实例(基于retrofit2.1.0)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.RxJava 到底是什么
一個詞:異步。
RxJava 在 GitHub 主頁上的自我介紹是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一個在 Java VM 上使用可觀測的序列來組成異步的、基于事件的程序的庫)。這就是 RxJava ,概括得非常精準。
然而,對于初學者來說,這太難看懂了。因為它是一個『總結』,而初學者更需要一個『引言』。
其實, RxJava 的本質可以壓縮為異步這一個詞。說到根上,它就是一個實現異步操作的庫,而別的定語都是基于這之上的。
?RxJava 的這個實現,是一條從上到下的鏈式調用,沒有任何嵌套,這在邏輯的簡潔性上是具有優勢的。當需求變得復雜時,這種優勢將更加明顯。
2.什么是Retrofit?
接下來我們看一下什么是Retrofit。在官網對Retrofit的描述是這樣的
A type-safe HTTP client for Android and Java說人話就是“一個類型安全的用于Android和Java網絡請求的客戶端”,其實就是一個封裝好的網絡請求庫。
3.RxJava+Retrofit結合在項目中使用
1)項目的build.gradle添加庫依賴
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations' })compile 'com.android.support:appcompat-v7:25.3.0' compile 'io.reactivex:rxjava:1.0.14'compile 'io.reactivex:rxandroid:1.0.1'compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'compile 'com.squareup.retrofit2:converter-gson:2.1.0'compile 'com.squareup.retrofit2:retrofit:2.1.0' testCompile 'junit:junit:4.12' }
2)創建實體類book
package com.example.admin.rxjavause; import java.util.List; public class Book{ private int count; private int start; private int total; private List<BooksBean> books; public int getCount() {return count; }public void setCount(int count) {this.count = count; }public int getStart() {return start; }public void setStart(int start) {this.start = start; }public int getTotal() {return total; }public void setTotal(int total) {this.total = total; }public List<BooksBean> getBooks() {return books; }public void setBooks(List<BooksBean> books) {this.books = books; }public static class BooksBean {@Override public String toString() {return "BooksBean{" +"rating=" + rating +", subtitle='" + subtitle + '\'' +", pubdate='" + pubdate + '\'' +", image='" + image + '\'' +", binding='" + binding + '\'' +", images=" + images +", alt='" + alt + '\'' +", id='" + id + '\'' +", title='" + title + '\'' +", author_intro='" + author_intro + '\'' +", origin_title='" + origin_title + '\'' +", price='" + price + '\'' +", catalog='" + catalog + '\'' +", pages='" + pages + '\'' +", publisher='" + publisher + '\'' +", isbn10='" + isbn10 + '\'' +", alt_title='" + alt_title + '\'' +", url='" + url + '\'' +", summary='" + summary + '\'' +", tags=" + tags +", translator=" + translator +", author=" + author +'}'; } private RatingBean rating; private String subtitle; private String pubdate; private String image; private String binding; private ImagesBean images; private String alt; private String id; private String title; private String author_intro; private String origin_title; private String price; private String catalog; private String pages; private String publisher; private String isbn10; private String alt_title; private String url; private String summary; private List<TagsBean> tags; private List<?> translator; private List<String> author; public RatingBean getRating() {return rating; }public void setRating(RatingBean rating) {this.rating = rating; }public String getSubtitle() {return subtitle; }public void setSubtitle(String subtitle) {this.subtitle = subtitle; }public String getPubdate() {return pubdate; }public void setPubdate(String pubdate) {this.pubdate = pubdate; }public String getImage() {return image; }public void setImage(String image) {this.image = image; }public String getBinding() {return binding; }public void setBinding(String binding) {this.binding = binding; }public ImagesBean getImages() {return images; }public void setImages(ImagesBean images) {this.images = images; }public String getAlt() {return alt; }public void setAlt(String alt) {this.alt = alt; }public String getId() {return id; }public void setId(String id) {this.id = id; }public String getTitle() {return title; }public void setTitle(String title) {this.title = title; }public String getAuthor_intro() {return author_intro; }public void setAuthor_intro(String author_intro) {this.author_intro = author_intro; }public String getOrigin_title() {return origin_title; }public void setOrigin_title(String origin_title) {this.origin_title = origin_title; }public String getPrice() {return price; }public void setPrice(String price) {this.price = price; }public String getCatalog() {return catalog; }public void setCatalog(String catalog) {this.catalog = catalog; }public String getPages() {return pages; }public void setPages(String pages) {this.pages = pages; }public String getPublisher() {return publisher; }public void setPublisher(String publisher) {this.publisher = publisher; }public String getIsbn10() {return isbn10; }public void setIsbn10(String isbn10) {this.isbn10 = isbn10; }public String getAlt_title() {return alt_title; }public void setAlt_title(String alt_title) {this.alt_title = alt_title; }public String getUrl() {return url; }public void setUrl(String url) {this.url = url; }public String getSummary() {return summary; }public void setSummary(String summary) {this.summary = summary; }public List<TagsBean> getTags() {return tags; }public void setTags(List<TagsBean> tags) {this.tags = tags; }public List<?> getTranslator() {return translator; }public void setTranslator(List<?> translator) {this.translator = translator; }public List<String> getAuthor() {return author; }public void setAuthor(List<String> author) {this.author = author; }public static class RatingBean { private int max; private int numRaters; private String average; private int min; public int getMax() {return max; }public void setMax(int max) {this.max = max; }public int getNumRaters() {return numRaters; }public void setNumRaters(int numRaters) {this.numRaters = numRaters; }public String getAverage() {return average; }public void setAverage(String average) {this.average = average; }public int getMin() {return min; }public void setMin(int min) {this.min = min; }}public static class ImagesBean { private String small; private String large; private String medium; public String getSmall() {return small; }public void setSmall(String small) {this.small = small; }public String getLarge() {return large; }public void setLarge(String large) {this.large = large; }public String getMedium() {return medium; }public void setMedium(String medium) {this.medium = medium; }}public static class TagsBean {@Override public String toString() {return "TagsBean{" +"count=" + count +", name='" + name + '\'' +", title='" + title + '\'' +'}'; } private int count; private String name; private String title; public int getCount() {return count; }public void setCount(int count) {this.count = count; }public String getName() {return name; }public void setName(String name) {this.name = name; }public String getTitle() {return title; }public void setTitle(String title) {this.title = title; }}}@Override public String toString() {return "Book{" +"count=" + count +", start=" + start +", total=" + total +", books=" + books +'}'; } }
3)創建ApiManagerService,定義網絡請求
public interface ApiManagerService {//發送get請求,請求樣式為https://api.douban.com/v2/book/search?q=金瓶梅&tag=&start=0&count=1 @GET("book/search")Observable<Book> getSearchBook(@Query("q") String name, @Query("tag") String tag, @Query("start") int start, @Query("count") int count); }
4)創建ApiManager,初始化retrofit對象,創建ApiManagerService對象
public class ApiManager {//基本url路徑 private static final String ENDPOINT = "https://api.douban.com/v2/"; static Retrofit retrofit = new Retrofit.Builder().baseUrl(ENDPOINT).addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create())).addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava .build(); public static final ApiManagerService apiManager = retrofit.create(ApiManagerService.class); }
5)在Activiity中進行網絡請求
Observable<Book> observable = ApiManager.apiManager.getSearchBook("金瓶梅", null, 0, 1); observable.subscribeOn(Schedulers.io())//請求數據的事件發生在io線程 .observeOn(AndroidSchedulers.mainThread())//請求完成后在主線程更顯UI .subscribe(new Observer<Book>() {//訂閱 @Override public void onCompleted() {//所有事件都完成,可以做些操作。。。 }@Override public void onError(Throwable e) {e.printStackTrace(); //請求過程中發生錯誤 }@Override public void onNext(Book book) {//這里的book就是我們請求接口返回的實體類 ((TextView) findViewById(R.id.text)).setText(book.toString()); }});
6)打完。。收功
總結
以上是生活随笔為你收集整理的Rxjava+Retrofit的使用实例(基于retrofit2.1.0)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Studio中引入Rec
- 下一篇: Rxjava+Retrofit+Mvp的