Android Retrofit和Rxjava的网络请求

Stephenie ·
更新时间:2024-09-20
· 901 次阅读

Android  Retrofit和Rxjava的网络请求

去年的时候好多公司就已经使用Rxjava和Retrofit了,最近自自己学习了一下,感觉真的是很好用,让自己的网络请求变得更简单了,而且封装性极强。

首先做一下准备工作,导入需要引用的文件

compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2' compile 'com.jakewharton:butterknife:7.0.1' compile 'com.android.support:recyclerview-v7:25.1.0'

网络请求的地址:https://api.douban.com/v2/movie/top250?start=0&count=10

添加网络请求权限

<uses-permission android:name="android.permission.INTERNET"/>

首先看一下Retrofit的使用基本用法

创建一个接口类MovieService 对网络接口进行请求这里写代码片

构建网络请求

public interface MovieService { @GET("top250") Call<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count); } String baseUrl="https://api.douban.com/v2/movie/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); MovieService service = retrofit.create(MovieService.class); service.getTopMovie(0,10) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<MovieBean>() { @Override public void onCompleted() { Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show(); } @Override public void onError(Throwable e) { resultTV.setText(e.getMessage()); } @Override public void onNext(MovieBean movieBean) { resultTV.setText(movieBean.getTitle()); } }); Call<MovieBean> call = service.getTopMovie(0, 10); call.enqueue(new Callback<MovieBean>() { @Override public void onResponse(Call<MovieBean> call, Response<MovieBean> response) { MovieBean body = response.body(); resultTV.setText(response.body().getTitle()); System.out.println("成功"+response.body().getCount()); } @Override public void onFailure(Call<MovieBean> call, Throwable t) { resultTV.setText(t.getMessage()); } });

现在看看我们的布局文件MainActivity的xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="ledon.com.retrofitdemo.MainActivity"> <Button android:id="@+id/click_me_BN" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:padding="5dp" android:text="获取数据" android:textSize="16sp"/> <ListView android:id="@+id/result_TV" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/click_me_BN" android:textSize="16sp"/> </RelativeLayout>

接下来就看看怎么样和RxJava的完美结合了。

首先改造一下MovieService这个接口

public interface MovieService { @GET("top250") Observable<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count); }

然后看一下我们需要创建一个HttpMethods关于一个http的请求方法

package ledon.com.retrofitdemo.api; import java.util.List; import java.util.concurrent.TimeUnit; import javax.security.auth.Subject; import ledon.com.retrofitdemo.MovieBean; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by Administrator on 2017/3/9. */ public class HttpMethods { public static final String BASE_URL="https://api.douban.com/v2/movie/"; private static final int DEFAULT_TIMEOUT=5; private Retrofit retrofit; private MovieService movieService; //私有化构造方法 private HttpMethods(){ //手动创建一个okhttpClient并设置超时时间 OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); retrofit=new Retrofit.Builder() .client(builder.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .baseUrl(BASE_URL) .build(); movieService = retrofit.create(MovieService.class); } //在访问httpmethods时候创建单例 private static class SingletonHolder{ private static final HttpMethods INSTANCE=new HttpMethods(); } //获取单例 public static HttpMethods getInstance(){ return SingletonHolder.INSTANCE; } public void getTopMovie(Subscriber<MovieBean>subscriber, int start, int count){ movieService.getTopMovie(start, count) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } }

so,很简单,我们的结合之路已经完成,另附源代码

package ledon.com.retrofitdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Button; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Toast; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import ledon.com.retrofitdemo.adapter.MovieAdapter; import ledon.com.retrofitdemo.api.HttpMethods; import rx.Subscriber; public class MainActivity extends AppCompatActivity { @Bind(R.id.click_me_BN) Button clickMeBN; @Bind(R.id.result_TV) ListView resultTV; @Bind(R.id.activity_main) RelativeLayout activityMain; private Subscriber<MovieBean> subscriber; private List<MovieBean.SubjectsBean> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //resultTV.setAdapter(); } //进行网络请求 private void getMovie() { subscriber = new Subscriber<MovieBean>() { @Override public void onCompleted() { Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show(); } @Override public void onError(Throwable e) { //resultTV.setText(e.getMessage()); } @Override public void onNext(MovieBean movieBean) { // List<MovieBean.SubjectsBean> subjects = movieBean.getSubjects(); list=movieBean.getSubjects(); MovieAdapter movieAdapter=new MovieAdapter(MainActivity.this,list); resultTV.setAdapter(movieAdapter); //resultTV.setText(movieBean.getTitle()); } }; HttpMethods.getInstance().getTopMovie(subscriber, 0, 10); /* String baseUrl="https://api.douban.com/v2/movie/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); MovieService service = retrofit.create(MovieService.class); service.getTopMovie(0,10) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<MovieBean>() { @Override public void onCompleted() { Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show(); } @Override public void onError(Throwable e) { resultTV.setText(e.getMessage()); } @Override public void onNext(MovieBean movieBean) { resultTV.setText(movieBean.getTitle()); } });*/ //Call<MovieBean> call = service.getTopMovie(0, 10); /* call.enqueue(new Callback<MovieBean>() { @Override public void onResponse(Call<MovieBean> call, Response<MovieBean> response) { MovieBean body = response.body(); resultTV.setText(response.body().getTitle()); System.out.println("成功"+response.body().getCount()); } @Override public void onFailure(Call<MovieBean> call, Throwable t) { resultTV.setText(t.getMessage()); } });*/ } @OnClick(R.id.click_me_BN) public void onClick() { getMovie(); } } package ledon.com.retrofitdemo; import java.util.List; /** * Created by Administrator on 2017/3/9. */ public class MovieBean { /** * count : 10 * start : 0 * total : 250 * subjects : [{"rating":{"max":10,"average":9.6,"stars":"50","min":0},"genres":["犯罪","剧情"],"title":"肖申克的救赎","casts":[{"alt":"https://movie.douban.com/celebrity/1054521/","avatars":{"small":"http://huoche.7234.cn/images/jb51/mf2ip3ptolp.jpg","large":"http://huoche.7234.cn/images/jb51/fqusc4s4awt.jpg","medium":"http://huoche.7234.cn/images/jb51/wi3xr33ebv4.jpg"},"name":"蒂姆·罗宾斯","id":"1054521"},{"alt":"https://movie.douban.com/celebrity/1054534/","avatars":{"small":"http://huoche.7234.cn/images/jb51/k3gczumsekj.jpg","large":"http://huoche.7234.cn/images/jb51/ic14fjodzao.jpg","medium":"http://huoche.7234.cn/images/jb51/uhljp41pe3c.jpg"},"name":"摩根·弗里曼","id":"1054534"},{"alt":"https://movie.douban.com/celebrity/1041179/","avatars":{"small":"http://huoche.7234.cn/images/jb51/iuho1zhgdok.jpg","large":"http://huoche.7234.cn/images/jb51/d3ovbhj2bhb.jpg","medium":"http://huoche.7234.cn/images/jb51/zwr0icd3xvq.jpg"},"name":"鲍勃·冈顿","id":"1041179"}],"collect_count":1036030,"original_title":"The Shawshank Redemption","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1047973/","avatars":{"small":"http://huoche.7234.cn/images/jb51/adz54vw5gyq.jpg","large":"http://huoche.7234.cn/images/jb51/yxqtk3imssa.jpg","medium":"http://huoche.7234.cn/images/jb51/b5ofoocxzky.jpg"},"name":"弗兰克·德拉邦特","id":"1047973"}],"year":"1994","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p480747492.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p480747492.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p480747492.jpg"},"alt":"https://movie.douban.com/subject/1292052/","id":"1292052"},{"rating":{"max":10,"average":9.4,"stars":"50","min":0},"genres":["剧情","动作","犯罪"],"title":"这个杀手不太冷","casts":[{"alt":"https://movie.douban.com/celebrity/1025182/","avatars":{"small":"http://huoche.7234.cn/images/jb51/5vx4vg4p4rw.jpg","large":"http://huoche.7234.cn/images/jb51/scz5yaq1uic.jpg","medium":"http://huoche.7234.cn/images/jb51/hccdg4kgzio.jpg"},"name":"让·雷诺","id":"1025182"},{"alt":"https://movie.douban.com/celebrity/1054454/","avatars":{"small":"http://huoche.7234.cn/images/jb51/bseg31ip4h4.jpg","large":"http://huoche.7234.cn/images/jb51/nms0qnm3slp.jpg","medium":"http://huoche.7234.cn/images/jb51/z34ny2rpun1.jpg"},"name":"娜塔莉·波特曼","id":"1054454"},{"alt":"https://movie.douban.com/celebrity/1010507/","avatars":{"small":"http://huoche.7234.cn/images/jb51/ph4ongtiigr.jpg","large":"http://huoche.7234.cn/images/jb51/oiznylwxb0z.jpg","medium":"http://huoche.7234.cn/images/jb51/gtbge11xyjg.jpg"},"name":"加里·奥德曼","id":"1010507"}],"collect_count":1002125,"original_title":"Léon","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1031876/","avatars":{"small":"http://huoche.7234.cn/images/jb51/5socsbow0oi.jpg","large":"http://huoche.7234.cn/images/jb51/jrwggvlp5sj.jpg","medium":"http://huoche.7234.cn/images/jb51/fnpuk4fskns.jpg"},"name":"吕克·贝松","id":"1031876"}],"year":"1994","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p511118051.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p511118051.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p511118051.jpg"},"alt":"https://movie.douban.com/subject/1295644/","id":"1295644"},{"rating":{"max":10,"average":9.5,"stars":"50","min":0},"genres":["剧情","爱情","同性"],"title":"霸王别姬","casts":[{"alt":"https://movie.douban.com/celebrity/1003494/","avatars":{"small":"http://huoche.7234.cn/images/jb51/rpxpjnnsnjo.jpg","large":"http://huoche.7234.cn/images/jb51/kwly51wvll1.jpg","medium":"http://huoche.7234.cn/images/jb51/bzvqo4jx0oj.jpg"},"name":"张国荣","id":"1003494"},{"alt":"https://movie.douban.com/celebrity/1050265/","avatars":{"small":"http://huoche.7234.cn/images/jb51/bl0bhglzoyl.jpg","large":"http://huoche.7234.cn/images/jb51/41zrmtgfn1g.jpg","medium":"http://huoche.7234.cn/i mages/jb51/ars5qmeo0aw.jpg"},"name":"张丰毅","id":"1050265"},{"alt":"https://movie.douban.com/celebrity/1035641/","avatars":{"small":"http://huoche.7234.cn/images/jb51/kz2ek1htksi.jpg","large":"http://huoche.7234.cn/images/jb51/qe3jawx1y5f.jpg","medium":"http://huoche.7234.cn/images/jb51/pdkxmrsmvau.jpg"},"name":"巩俐","id":"1035641"}],"collect_count":727900,"original_title":"霸王别姬","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1023040/","avatars":{"small":"http://huoche.7234.cn/images/jb51/i445duurbsl.jpg","large":"http://huoche.7234.cn/images/jb51/qievibzbupp.jpg","medium":"http://huoche.7234.cn/images/jb51/godzhiirdb4.jpg"},"name":"陈凯歌","id":"1023040"}],"year":"1993","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p1910813120.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p1910813120.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p1910813120.jpg"},"alt":"https://movie.douban.com/subject/1291546/","id":"1291546"},{"rating":{"max":10,"average":9.4,"stars":"50","min":0},"genres":["剧情","爱情"],"title":"阿甘正传","casts":[{"alt":"https://movie.douban.com/celebrity/1054450/","avatars":{"small":"http://huoche.7234.cn/images/jb51/bc1hzupcbny.jpg","large":"http://huoche.7234.cn/images/jb51/lrkm1mbgv25.jpg","medium":"http://huoche.7234.cn/images/jb51/2rqv5hnrkj2.jpg"},"name":"汤姆·汉克斯","id":"1054450"},{"alt":"https://movie.douban.com/celebrity/1002676/","avatars":{"small":"http://huoche.7234.cn/images/jb51/ndjdn0uu1pn.jpg","large":"http://huoche.7234.cn/images/jb51/hwopshj0afe.jpg","medium":"http://huoche.7234.cn/images/jb51/happcovggzs.jpg"},"name":"罗宾·怀特","id":"1002676"},{"alt":"https://movie.douban.com/celebrity/1031848/","avatars":{"small":"http://huoche.7234.cn/images/jb51/ekvyf0oddbi.jpg","large":"http://huoche.7234.cn/images/jb51/2tcarhqacyr.jpg","medium":"http://huoche.7234.cn/images/jb51/wgmky4jxyvb.jpg"},"name":"加里·西尼斯","id":"1031848"}],"collect_count":895393,"original_title":"Forrest Gump","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1053564/","avatars":{"small":"http://huoche.7234.cn/images/jb51/dqvn434aqrj.jpg","large":"http://huoche.7234.cn/images/jb51/1lezrmjyron.jpg","medium":"http://huoche.7234.cn/images/jb51/p5dflaae2wm.jpg"},"name":"罗伯特·泽米吉斯","id":"1053564"}],"year":"1994","images":{"small":"https://img1.doubanio.com/view/movie_poster_cover/ipst/public/p510876377.jpg","large":"https://img1.doubanio.com/view/movie_poster_cover/lpst/public/p510876377.jpg","medium":"https://img1.doubanio.com/view/movie_poster_cover/spst/public/p510876377.jpg"},"alt":"https://movie.douban.com/subject/1292720/","id":"1292720"},{"rating":{"max":10,"average":9.5,"stars":"50","min":0},"genres":["剧情","喜剧","爱情"],"title":"美丽人生","casts":[{"alt":"https://movie.douban.com/celebrity/1041004/","avatars":{"small":"http://huoche.7234.cn/images/jb51/bpl55ygxojk.jpg","large":"http://huoche.7234.cn/images/jb51/q4vykzjdb2g.jpg","medium":"http://huoche.7234.cn/images/jb51/asqh3v5eunf.jpg"},"name":"罗伯托·贝尼尼","id":"1041004"},{"alt":"https://movie.douban.com/celebrity/1000375/","avatars":{"small":"http://huoche.7234.cn/images/jb51/0fv2vykblpm.jpg","large":"http://huoche.7234.cn/images/jb51/adfcfmao4gl.jpg","medium":"http://huoche.7234.cn/images/jb51/tim55shhetk.jpg"},"name":"尼可莱塔·布拉斯基","id":"1000375"},{"alt":"https://movie.douban.com/celebrity/1000368/","avatars":{"small":"http://huoche.7234.cn/images/jb51/04veujtk0gi.jpg","large":"http://huoche.7234.cn/images/jb51/ah2frk4dz3z.jpg","medium":"http://huoche.7234.cn/images/jb51/xj5ymhoc3q5.jpg"},"name":"乔治·坎塔里尼","id":"1000368"}],"collect_count":493063,"original_title":"La vita è bella","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1041004/","avatars":{"small":"http://huoche.7234.cn/images/jb51/bpl55ygxojk.jpg","large":"http://huoche.7234.cn/images/jb51/q4vykzjdb2g.jpg","medium":"http://huoche.7234. cn/images/jb51/asqh3v5eunf.jpg"},"name":"罗伯托·贝尼尼","id":"1041004"}],"year":"1997","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p510861873.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p510861873.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p510861873.jpg"},"alt":"https://movie.douban.com/subject/1292063/","id":"1292063"},{"rating":{"max":10,"average":9.2,"stars":"50","min":0},"genres":["剧情","动画","奇幻"],"title":"千与千寻","casts":[{"alt":"https://movie.douban.com/celebrity/1023337/","avatars":{"small":"http://huoche.7234.cn/images/jb51/g3oe1lg4ujf.jpg","large":"http://huoche.7234.cn/images/jb51/k1sdedo1w52.jpg","medium":"http://huoche.7234.cn/images/jb51/sawfyev3rvj.jpg"},"name":"柊瑠美","id":"1023337"},{"alt":"https://movie.douban.com/celebrity/1005438/","avatars":{"small":"http://huoche.7234.cn/images/jb51/n04aayg3tvk.jpg","large":"http://huoche.7234.cn/images/jb51/15gvnuxsg5l.jpg","medium":"http://huoche.7234.cn/images/jb51/3gcamltfqfl.jpg"},"name":"入野自由","id":"1005438"},{"alt":"https://movie.douban.com/celebrity/1045797/","avatars":{"small":"http://huoche.7234.cn/images/jb51/lzwbr1yezbd.jpg","large":"http://huoche.7234.cn/images/jb51/55rgmkcbphi.jpg","medium":"http://huoche.7234.cn/images/jb51/2czsm1sp4yj.jpg"},"name":"夏木真理","id":"1045797"}],"collect_count":801778,"original_title":"千と千尋の神隠し","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054439/","avatars":{"small":"http://huoche.7234.cn/images/jb51/x0sa1f1mpb2.jpg","large":"http://huoche.7234.cn/images/jb51/fetb3joci2c.jpg","medium":"http://huoche.7234.cn/images/jb51/eilvgfssgpm.jpg"},"name":"宫崎骏","id":"1054439"}],"year":"2001","images":{"small":"http://huoche.7234.cn/images/jb51/d1p015cr5zi.jpg","large":"http://huoche.7234.cn/images/jb51/g0jplkecemn.jpg","medium":"http://huoche.7234.cn/images/jb51/2py5dg3avkg.jpg"},"alt":"https://movie.douban.com/subject/1291561/","id":"1291561"},{"rating":{"max":10,"average":9.4,"stars":"50","min":0},"genres":["剧情","历史","战争"],"title":"辛德勒的名单","casts":[{"alt":"https://movie.douban.com/celebrity/1031220/","avatars":{"small":"http://huoche.7234.cn/images/jb51/k2jx1qppspp.jpg","large":"http://huoche.7234.cn/images/jb51/hvnt5bzx31z.jpg","medium":"http://huoche.7234.cn/images/jb51/zyvfyhmxlwh.jpg"},"name":"连姆·尼森","id":"1031220"},{"alt":"https://movie.douban.com/celebrity/1054393/","avatars":{"small":"http://huoche.7234.cn/images/jb51/55bhrm5ko4e.jpg","large":"http://huoche.7234.cn/images/jb51/wcwdzc3kta5.jpg","medium":"http://huoche.7234.cn/images/jb51/twnz2e4feqs.jpg"},"name":"本·金斯利","id":"1054393"},{"alt":"https://movie.douban.com/celebrity/1006956/","avatars":{"small":"http://huoche.7234.cn/images/jb51/1swdrfmxysn.jpg","large":"http://huoche.7234.cn/images/jb51/cnv5h0cfhf1.jpg","medium":"http://huoche.7234.cn/images/jb51/dwm44n5rqzd.jpg"},"name":"拉尔夫·费因斯","id":"1006956"}],"collect_count":472445,"original_title":"Schindler's List","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054440/","avatars":{"small":"http://huoche.7234.cn/images/jb51/b4spg1kfrbk.jpg","large":"http://huoche.7234.cn/images/jb51/z5fypo2v1d1.jpg","medium":"http://huoche.7234.cn/images/jb51/d5mfldwgfbs.jpg"},"name":"史蒂文·斯皮尔伯格","id":"1054440"}],"year":"1993","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p492406163.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p492406163.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p492406163.jpg"},"alt":"https://movie.douban.com/subject/1295124/","id":"1295124"},{"rating":{"max":10,"average":9.2,"stars":"45","min":0},"genres":["剧情","爱情","灾难"],"title":"泰坦尼克号","casts":[{"alt":"https://movie.douban.com/celebrity/1041029/","avatars":{"small":"http://huoche.7234.cn/images/jb51/ny5xdoviicz.jpg","large":"http://huoche.7234.cn/images/jb51/ iz1knslde2m.jpg","medium":"http://huoche.7234.cn/images/jb51/x45s4swwspw.jpg"},"name":"莱昂纳多·迪卡普里奥","id":"1041029"},{"alt":"https://movie.douban.com/celebrity/1054446/","avatars":{"small":"http://huoche.7234.cn/images/jb51/aj0k3qiim3q.jpg","large":"http://huoche.7234.cn/images/jb51/furonctqejl.jpg","medium":"http://huoche.7234.cn/images/jb51/pv0jxsjajhy.jpg"},"name":"凯特·温丝莱特","id":"1054446"},{"alt":"https://movie.douban.com/celebrity/1031864/","avatars":{"small":"http://huoche.7234.cn/images/jb51/2tfrm1fbfcb.jpg","large":"http://huoche.7234.cn/images/jb51/dzaegacp14h.jpg","medium":"http://huoche.7234.cn/images/jb51/w3etrwnjicj.jpg"},"name":"比利·赞恩","id":"1031864"}],"collect_count":823041,"original_title":"Titanic","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1022571/","avatars":{"small":"http://huoche.7234.cn/images/jb51/iyuw3vovy2p.jpg","large":"http://huoche.7234.cn/images/jb51/zmlxueddhbx.jpg","medium":"http://huoche.7234.cn/images/jb51/stkzoghehue.jpg"},"name":"詹姆斯·卡梅隆","id":"1022571"}],"year":"1997","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p457760035.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p457760035.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p457760035.jpg"},"alt":"https://movie.douban.com/subject/1292722/","id":"1292722"},{"rating":{"max":10,"average":9.2,"stars":"50","min":0},"genres":["剧情","动作","科幻"],"title":"盗梦空间","casts":[{"alt":"https://movie.douban.com/celebrity/1041029/","avatars":{"small":"http://huoche.7234.cn/images/jb51/ny5xdoviicz.jpg","large":"http://huoche.7234.cn/images/jb51/iz1knslde2m.jpg","medium":"http://huoche.7234.cn/images/jb51/x45s4swwspw.jpg"},"name":"莱昂纳多·迪卡普里奥","id":"1041029"},{"alt":"https://movie.douban.com/celebrity/1101703/","avatars":{"small":"http://huoche.7234.cn/images/jb51/m5qrhwkvipo.jpg","large":"http://huoche.7234.cn/images/jb51/w5dvormnfg3.jpg","medium":"http://huoche.7234.cn/images/jb51/q0sf5xi121z.jpg"},"name":"约瑟夫·高登-莱维特","id":"1101703"},{"alt":"https://movie.douban.com/celebrity/1012520/","avatars":{"small":"http://huoche.7234.cn/images/jb51/gqe0s2iacfi.jpg","large":"http://huoche.7234.cn/images/jb51/p2ahijzrmhg.jpg","medium":"http://huoche.7234.cn/images/jb51/4mv1ogtlwud.jpg"},"name":"艾伦·佩吉","id":"1012520"}],"collect_count":903330,"original_title":"Inception","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054524/","avatars":{"small":"http://huoche.7234.cn/images/jb51/5quuc3mcvzu.jpg","large":"http://huoche.7234.cn/images/jb51/2bk3fbud2bm.jpg","medium":"http://huoche.7234.cn/images/jb51/njozljg1xe2.jpg"},"name":"克里斯托弗·诺兰","id":"1054524"}],"year":"2010","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p513344864.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p513344864.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p513344864.jpg"},"alt":"https://movie.douban.com/subject/3541415/","id":"3541415"},{"rating":{"max":10,"average":9.3,"stars":"50","min":0},"genres":["喜剧","爱情","科幻"],"title":"机器人总动员","casts":[{"alt":"https://movie.douban.com/celebrity/1009535/","avatars":{"small":"http://huoche.7234.cn/images/jb51/uvogxgeotxl.jpg","large":"http://huoche.7234.cn/images/jb51/cgkupdcza2n.jpg","medium":"http://huoche.7234.cn/images/jb51/egsreghgdby.jpg"},"name":"本·贝尔特","id":"1009535"},{"alt":"https://movie.douban.com/celebrity/1000389/","avatars":{"small":"http://huoche.7234.cn/images/jb51/fepaflp2dli.jpg","large":"http://huoche.7234.cn/images/jb51/rejp00eb1pc.jpg","medium":"http://huoche.7234.cn/images/jb51/vw5fbvk4i4f.jpg"},"name":"艾丽莎·奈特","id":"1000389"},{"alt":"https://movie.douban.com/celebrity/1018022/","avatars":{"small":"http://huoche.7234.cn/images/jb51/i5hmzjh3xu2.jpg","large":"http://huoche.7234.cn/images/jb51/acak05jr2mg.jpg","medium":"http://huo che.7234.cn/images/jb51/a0zjnywzxqv.jpg"},"name":"杰夫·格尔林","id":"1018022"}],"collect_count":586255,"original_title":"WALL·E","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1036450/","avatars":{"small":"http://huoche.7234.cn/images/jb51/kxuapsa3ihc.jpg","large":"http://huoche.7234.cn/images/jb51/t41fxevylfu.jpg","medium":"http://huoche.7234.cn/images/jb51/2c04gv24ko4.jpg"},"name":"安德鲁·斯坦顿","id":"1036450"}],"year":"2008","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p449665982.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p449665982.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p449665982.jpg"},"alt":"https://movie.douban.com/subject/2131459/","id":"2131459"}] * title : 豆瓣电影Top250 */ private int count; private int start; private int total; private String title; private List<SubjectsBean> subjects; 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 String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public List<SubjectsBean> getSubjects() { return subjects; } public void setSubjects(List<SubjectsBean> subjects) { this.subjects = subjects; } public static class SubjectsBean { /** * rating : {"max":10,"average":9.6,"starsmin":0} * genres : ["犯罪","剧情"]":"50"," * title : 肖申克的救赎 * casts : [{"alt":"https://movie.douban.com/celebrity/1054521/","avatars":{"small":"http://huoche.7234.cn/images/jb51/mf2ip3ptolp.jpg","large":"http://huoche.7234.cn/images/jb51/fqusc4s4awt.jpg","medium":"http://huoche.7234.cn/images/jb51/wi3xr33ebv4.jpg"},"name":"蒂姆·罗宾斯","id":"1054521"},{"alt":"https://movie.douban.com/celebrity/1054534/","avatars":{"small":"http://huoche.7234.cn/images/jb51/k3gczumsekj.jpg","large":"http://huoche.7234.cn/images/jb51/ic14fjodzao.jpg","medium":"http://huoche.7234.cn/images/jb51/uhljp41pe3c.jpg"},"name":"摩根·弗里曼","id":"1054534"},{"alt":"https://movie.douban.com/celebrity/1041179/","avatars":{"small":"http://huoche.7234.cn/images/jb51/iuho1zhgdok.jpg","large":"http://huoche.7234.cn/images/jb51/d3ovbhj2bhb.jpg","medium":"http://huoche.7234.cn/images/jb51/zwr0icd3xvq.jpg"},"name":"鲍勃·冈顿","id":"1041179"}] * collect_count : 1036030 * original_title : The Shawshank Redemption * subtype : movie * directors : [{"alt":"https://movie.douban.com/celebrity/1047973/","avatars":{"small":"http://huoche.7234.cn/images/jb51/adz54vw5gyq.jpg","large":"http://huoche.7234.cn/images/jb51/yxqtk3imssa.jpg","medium":"http://huoche.7234.cn/images/jb51/b5ofoocxzky.jpg"},"name":"弗兰克·德拉邦特","id":"1047973"}] * year : 1994 * images : {"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p480747492.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p480747492.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p480747492.jpg"} * alt : https://movie.douban.com/subject/1292052/ * id : 1292052 */ private RatingBean rating; private String title; private int collect_count; private String original_title; private String subtype; private String year; private ImagesBean images; private String alt; private String id; private List<String> genres; private List<CastsBean> casts; private List<DirectorsBean> directors; public RatingBean getRating() { return rating; } public void setRating(RatingBean rating) { this.rating = rating; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getCollect_count() { return collect_count; } public void setCollect_count(int collect_count) { this.collect_count = collect_count; } public String getOriginal_title() { return original_title; } public void setOriginal_title(String original_title) { this.original_title = original_title; } public String getSubtype() { return subtype; } public void setSubtype(String subtype) { this.subtype = subtype; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } 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 List<String> getGenres() { return genres; } public void setGenres(List<String> genres) { this.genres = genres; } public List<CastsBean> getCasts() { return casts; } public void setCasts(List<CastsBean> casts) { this.casts = casts; } public List<DirectorsBean> getDirectors() { return directors; } public void setDirectors(List<DirectorsBean> directors) { this.directors = directors; } public static class RatingBean { /** * max : 10 * average : 9.6 * stars : 50 * min : 0 */ private int max; private double average; private String stars; private int min; public int getMax() { return max; } public void setMax(int max) { this.max = max; } public double getAverage() { return average; } public void setAverage(double average) { this.average = average; } public String getStars() { return stars; } public void setStars(String stars) { this.stars = stars; } public int getMin() { return min; } public void setMin(int min) { this.min = min; } } public static class ImagesBean { /** * small : https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p480747492.jpg * large : https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p480747492.jpg * medium : https://img3.doubanio.com/view/movie_poster_cover/spst/public/p480747492.jpg */ 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 CastsBean { /** * alt : https://movie.douban.com/celebrity/1054521/ * avatars : {"small":"http://huoche.7234.cn/images/jb51/mf2ip3ptolp.jpg","large":"http://huoche.7234.cn/images/jb51/fqusc4s4awt.jpg","medium":"http://huoche.7234.cn/images/jb51/wi3xr33ebv4.jpg"} * name : 蒂姆·罗宾斯 * id : 1054521 */ private String alt; private AvatarsBean avatars; private String name; private String id; public String getAlt() { return alt; } public void setAlt(String alt) { this.alt = alt; } public AvatarsBean getAvatars() { return avatars; } public void setAvatars(AvatarsBean avatars) { this.avatars = avatars; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public static class AvatarsBean { /** * small : https://img3.doubanio.com/img/celebrity/small/17525.jpg * large : https://img3.doubanio.com/img/celebrity/large/17525.jpg * medium : https://img3.doubanio.com/img/celebrity/medium/17525.jpg */ 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 DirectorsBean { /** * alt : https://movie.douban.com/celebrity/1047973/ * avatars : {"small":"http://huoche.7234.cn/images/jb51/adz54vw5gyq.jpg","large":"http://huoche.7234.cn/images/jb51/yxqtk3imssa.jpg","medium":"http://huoche.7234.cn/images/jb51/b5ofoocxzky.jpg"} * name : 弗兰克·德拉邦特 * id : 1047973 */ private String alt; private AvatarsBeanX avatars; private String name; private String id; public String getAlt() { return alt; } public void setAlt(String alt) { this.alt = alt; } public AvatarsBeanX getAvatars() { return avatars; } public void setAvatars(AvatarsBeanX avatars) { this.avatars = avatars; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public static class AvatarsBeanX { /** * small : https://img3.doubanio.com/img/celebrity/small/230.jpg * large : https://img3.doubanio.com/img/celebrity/large/230.jpg * medium : https://img3.doubanio.com/img/celebrity/medium/230.jpg */ 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; } } } } } package ledon.com.retrofitdemo.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.List; import ledon.com.retrofitdemo.MovieBean; import ledon.com.retrofitdemo.R; /** * Created by Administrator on 2017/3/9. */ public class MovieAdapter extends BaseAdapter { private Context context; private List<MovieBean.SubjectsBean> lists; public MovieAdapter(Context context, List<MovieBean.SubjectsBean> lists) { this.context = context; this.lists = lists; } @Override public int getCount() { System.out.println("集合大小:"+lists.size()); return lists.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View convertView, ViewGroup viewGroup) { ViewHolder holder; if (convertView==null){ convertView = LayoutInflater.from(context).inflate(R.layout.item, null); holder=new ViewHolder(); holder.tv_title= (TextView) convertView.findViewById(R.id.tv_title); holder.tv_name= (TextView) convertView.findViewById(R.id.tv_name); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); } //MovieBean.SubjectsBean subjectsBean = lists.get(i).getSubjects().get(i); holder.tv_title.setText(lists.get(i).getTitle()); // holder.tv_name.setText(lists.get(i).getCasts().get(i).getName()); return convertView; } static class ViewHolder{ TextView tv_title; TextView tv_name; } } package ledon.com.retrofitdemo.api; import java.util.List; import java.util.concurrent.TimeUnit; import javax.security.auth.Subject; import ledon.com.retrofitdemo.MovieBean; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by Administrator on 2017/3/9. */ public class HttpMethods { public static final String BASE_URL="https://api.douban.com/v2/movie/"; private static final int DEFAULT_TIMEOUT=5; private Retrofit retrofit; private MovieService movieService; //私有化构造方法 private HttpMethods(){ //手动创建一个okhttpClient并设置超时时间 OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); retrofit=new Retrofit.Builder() .client(builder.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .baseUrl(BASE_URL) .build(); movieService = retrofit.create(MovieService.class); } //在访问httpmethods时候创建单例 private static class SingletonHolder{ private static final HttpMethods INSTANCE=new HttpMethods(); } //获取单例 public static HttpMethods getInstance(){ return SingletonHolder.INSTANCE; } public void getTopMovie(Subscriber<MovieBean>subscriber, int start, int count){ movieService.getTopMovie(start, count) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); /* movieService.getTopMovie(start, count) .map(new HttpResultFunc<List<Subject>>()) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber);*/ } private class HttpResultFunc<T> implements Func1<HttpResult<T>,T>{ @Override public T call(HttpResult<T> httpResult) { return httpResult.getSubjects(); } } } package ledon.com.retrofitdemo.api; import ledon.com.retrofitdemo.MovieBean; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; import rx.Observable; /** * Created by Administrator on 2017/3/9. */ public interface MovieService { @GET("top250") Observable<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count); } <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_title" android:textSize="20dp" android:text="这个杀手不太冷"/> <ImageView android:layout_gravity="center" android:id="@+id/iv" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/tv_name" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp" android:text="主演:呵呵哈哈哈"/> </LinearLayout>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:深入浅出RxJava+Retrofit+OkHttp网络请求Kotlin结合Rxjava+Retrofit实现极简网络请求的方法RxJava+Retrofit实现网络请求封装的方法



rxjava retrofit Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号