当前位置: 移动技术网 > IT编程>移动开发>Android > Android Retrofit和Rxjava的网络请求

Android Retrofit和Rxjava的网络请求

2019年07月24日  | 移动技术网IT编程  | 我要评论

2014高考分数线预测,小男人大老婆,dyaz

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>

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网