Android Retrofit和Rxjava的网络请求
程序员文章站
2023-12-11 11:50:16
android retrofit和rxjava的网络请求
去年的时候好多公司就已经使用rxjava和retrofit了,最近自自己学习了一下,感觉真的是很好用...
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":"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"},"name":"蒂姆·罗宾斯","id":"1054521"},{"alt":"https://movie.douban.com/celebrity/1054534/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/34642.jpg","large":"https://img3.doubanio.com/img/celebrity/large/34642.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/34642.jpg"},"name":"摩根·弗里曼","id":"1054534"},{"alt":"https://movie.douban.com/celebrity/1041179/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/5837.jpg","large":"https://img1.doubanio.com/img/celebrity/large/5837.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/5837.jpg"},"name":"鲍勃·冈顿","id":"1041179"}],"collect_count":1036030,"original_title":"the shawshank redemption","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1047973/","avatars":{"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"},"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":"https://img3.doubanio.com/img/celebrity/small/8833.jpg","large":"https://img3.doubanio.com/img/celebrity/large/8833.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/8833.jpg"},"name":"让·雷诺","id":"1025182"},{"alt":"https://movie.douban.com/celebrity/1054454/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/2274.jpg","large":"https://img3.doubanio.com/img/celebrity/large/2274.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/2274.jpg"},"name":"娜塔莉·波特曼","id":"1054454"},{"alt":"https://movie.douban.com/celebrity/1010507/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/104.jpg","large":"https://img3.doubanio.com/img/celebrity/large/104.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/104.jpg"},"name":"加里·奥德曼","id":"1010507"}],"collect_count":1002125,"original_title":"léon","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1031876/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/33301.jpg","large":"https://img3.doubanio.com/img/celebrity/large/33301.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/33301.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":"https://img1.doubanio.com/img/celebrity/small/67.jpg","large":"https://img1.doubanio.com/img/celebrity/large/67.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/67.jpg"},"name":"张国荣","id":"1003494"},{"alt":"https://movie.douban.com/celebrity/1050265/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/10381.jpg","large":"https://img3.doubanio.com/img/celebrity/large/10381.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/10381.jpg"},"name":"张丰毅","id":"1050265"},{"alt":"https://movie.douban.com/celebrity/1035641/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/1399268395.47.jpg","large":"https://img1.doubanio.com/img/celebrity/large/1399268395.47.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/1399268395.47.jpg"},"name":"巩俐","id":"1035641"}],"collect_count":727900,"original_title":"霸王别姬","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1023040/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/750.jpg","large":"https://img3.doubanio.com/img/celebrity/large/750.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/750.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":"https://img3.doubanio.com/img/celebrity/small/551.jpg","large":"https://img3.doubanio.com/img/celebrity/large/551.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/551.jpg"},"name":"汤姆·汉克斯","id":"1054450"},{"alt":"https://movie.douban.com/celebrity/1002676/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/51737.jpg","large":"https://img1.doubanio.com/img/celebrity/large/51737.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/51737.jpg"},"name":"罗宾·怀特","id":"1002676"},{"alt":"https://movie.douban.com/celebrity/1031848/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/1345.jpg","large":"https://img3.doubanio.com/img/celebrity/large/1345.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/1345.jpg"},"name":"加里·西尼斯","id":"1031848"}],"collect_count":895393,"original_title":"forrest gump","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1053564/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/505.jpg","large":"https://img3.doubanio.com/img/celebrity/large/505.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/505.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":"https://img3.doubanio.com/img/celebrity/small/26764.jpg","large":"https://img3.doubanio.com/img/celebrity/large/26764.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/26764.jpg"},"name":"罗伯托·贝尼尼","id":"1041004"},{"alt":"https://movie.douban.com/celebrity/1000375/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/9548.jpg","large":"https://img1.doubanio.com/img/celebrity/large/9548.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/9548.jpg"},"name":"尼可莱塔·布拉斯基","id":"1000375"},{"alt":"https://movie.douban.com/celebrity/1000368/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/45590.jpg","large":"https://img3.doubanio.com/img/celebrity/large/45590.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/45590.jpg"},"name":"乔治·坎塔里尼","id":"1000368"}],"collect_count":493063,"original_title":"la vita è bella","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1041004/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/26764.jpg","large":"https://img3.doubanio.com/img/celebrity/large/26764.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/26764.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":"https://img3.doubanio.com/img/celebrity/small/1463193210.13.jpg","large":"https://img3.doubanio.com/img/celebrity/large/1463193210.13.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/1463193210.13.jpg"},"name":"柊瑠美","id":"1023337"},{"alt":"https://movie.douban.com/celebrity/1005438/","avatars":{"small":"https://img5.doubanio.com/img/celebrity/small/44986.jpg","large":"https://img5.doubanio.com/img/celebrity/large/44986.jpg","medium":"https://img5.doubanio.com/img/celebrity/medium/44986.jpg"},"name":"入野*","id":"1005438"},{"alt":"https://movie.douban.com/celebrity/1045797/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/18785.jpg","large":"https://img3.doubanio.com/img/celebrity/large/18785.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/18785.jpg"},"name":"夏木真理","id":"1045797"}],"collect_count":801778,"original_title":"千と千尋の神隠し","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054439/","avatars":{"small":"https://img5.doubanio.com/img/celebrity/small/616.jpg","large":"https://img5.doubanio.com/img/celebrity/large/616.jpg","medium":"https://img5.doubanio.com/img/celebrity/medium/616.jpg"},"name":"宫崎骏","id":"1054439"}],"year":"2001","images":{"small":"https://img5.doubanio.com/view/movie_poster_cover/ipst/public/p1910830216.jpg","large":"https://img5.doubanio.com/view/movie_poster_cover/lpst/public/p1910830216.jpg","medium":"https://img5.doubanio.com/view/movie_poster_cover/spst/public/p1910830216.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":"https://img5.doubanio.com/img/celebrity/small/44906.jpg","large":"https://img5.doubanio.com/img/celebrity/large/44906.jpg","medium":"https://img5.doubanio.com/img/celebrity/medium/44906.jpg"},"name":"连姆·尼森","id":"1031220"},{"alt":"https://movie.douban.com/celebrity/1054393/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/1374649659.58.jpg","large":"https://img1.doubanio.com/img/celebrity/large/1374649659.58.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/1374649659.58.jpg"},"name":"本·金斯利","id":"1054393"},{"alt":"https://movie.douban.com/celebrity/1006956/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/28941.jpg","large":"https://img3.doubanio.com/img/celebrity/large/28941.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/28941.jpg"},"name":"拉尔夫·费因斯","id":"1006956"}],"collect_count":472445,"original_title":"schindler's list","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054440/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/34602.jpg","large":"https://img3.doubanio.com/img/celebrity/large/34602.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/34602.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":"https://img3.doubanio.com/img/celebrity/small/470.jpg","large":"https://img3.doubanio.com/img/celebrity/large/470.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/470.jpg"},"name":"莱昂纳多·迪卡普里奥","id":"1041029"},{"alt":"https://movie.douban.com/celebrity/1054446/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/53358.jpg","large":"https://img1.doubanio.com/img/celebrity/large/53358.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/53358.jpg"},"name":"凯特·温丝莱特","id":"1054446"},{"alt":"https://movie.douban.com/celebrity/1031864/","avatars":{"small":"https://img5.doubanio.com/img/celebrity/small/45186.jpg","large":"https://img5.doubanio.com/img/celebrity/large/45186.jpg","medium":"https://img5.doubanio.com/img/celebrity/medium/45186.jpg"},"name":"比利·赞恩","id":"1031864"}],"collect_count":823041,"original_title":"titanic","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1022571/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/33715.jpg","large":"https://img3.doubanio.com/img/celebrity/large/33715.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/33715.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":"https://img3.doubanio.com/img/celebrity/small/470.jpg","large":"https://img3.doubanio.com/img/celebrity/large/470.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/470.jpg"},"name":"莱昂纳多·迪卡普里奥","id":"1041029"},{"alt":"https://movie.douban.com/celebrity/1101703/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/3517.jpg","large":"https://img1.doubanio.com/img/celebrity/large/3517.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/3517.jpg"},"name":"约瑟夫·高登-莱维特","id":"1101703"},{"alt":"https://movie.douban.com/celebrity/1012520/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/118.jpg","large":"https://img1.doubanio.com/img/celebrity/large/118.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/118.jpg"},"name":"艾伦·佩吉","id":"1012520"}],"collect_count":903330,"original_title":"inception","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054524/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/673.jpg","large":"https://img3.doubanio.com/img/celebrity/large/673.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/673.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":"https://img1.doubanio.com/img/celebrity/small/13028.jpg","large":"https://img1.doubanio.com/img/celebrity/large/13028.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/13028.jpg"},"name":"本·贝尔特","id":"1009535"},{"alt":"https://movie.douban.com/celebrity/1000389/","avatars":{"small":"https://img5.doubanio.com/img/celebrity/small/1365856130.16.jpg","large":"https://img5.doubanio.com/img/celebrity/large/1365856130.16.jpg","medium":"https://img5.doubanio.com/img/celebrity/medium/1365856130.16.jpg"},"name":"艾丽莎·奈特","id":"1000389"},{"alt":"https://movie.douban.com/celebrity/1018022/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/31068.jpg","large":"https://img1.doubanio.com/img/celebrity/large/31068.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/31068.jpg"},"name":"杰夫·格尔林","id":"1018022"}],"collect_count":586255,"original_title":"wall·e","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1036450/","avatars":{"small":"https://img5.doubanio.com/img/celebrity/small/1467359656.96.jpg","large":"https://img5.doubanio.com/img/celebrity/large/1467359656.96.jpg","medium":"https://img5.doubanio.com/img/celebrity/medium/1467359656.96.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":"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"},"name":"蒂姆·罗宾斯","id":"1054521"},{"alt":"https://movie.douban.com/celebrity/1054534/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/34642.jpg","large":"https://img3.doubanio.com/img/celebrity/large/34642.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/34642.jpg"},"name":"摩根·弗里曼","id":"1054534"},{"alt":"https://movie.douban.com/celebrity/1041179/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/5837.jpg","large":"https://img1.doubanio.com/img/celebrity/large/5837.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/5837.jpg"},"name":"鲍勃·冈顿","id":"1041179"}] * collect_count : 1036030 * original_title : the shawshank redemption * subtype : movie * directors : [{"alt":"https://movie.douban.com/celebrity/1047973/","avatars":{"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"},"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":"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"} * 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":"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"} * 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>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android Retrofit和Rxjava的网络请求
-
神经网络API、Kotlin支持,那些你必须知道的Android 8.1预览版和Android Studio 3.0新特性
-
Android基于OkHttpUtils网络请求的二次封装
-
android上的一个网络接口和图片缓存框架enif简析
-
Android Retrofit的简单介绍和使用
-
Kotlin结合Rxjava+Retrofit实现极简网络请求的方法
-
Android Retrofit和Rxjava的网络请求
-
Android下通过httpClient发送GET和POST请求的实例代码
-
深入浅出RxJava+Retrofit+OkHttp网络请求
-
神经网络API、Kotlin支持,那些你必须知道的Android 8.1预览版和Android Studio 3.0新特性