Rxjava+Retrofit的使用实例(基于retrofit2.1.0)

    xiaoxiao2021-04-19  102

    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)打完。。收功

    转载请注明原文地址: https://ju.6miu.com/read-676020.html

    最新回复(0)