今天就跟大家聊聊有关如何在Android中利用Retrofit与Rxjava实现网络请求,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
首先做一下准备工作,导入需要引用的文件
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://cache.yisu.com/upload/information/20200623/125/132332.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132333.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132334.jpg"},"name":"蒂姆·罗宾斯","id":"1054521"},{"alt":"https://movie.douban.com/celebrity/1054534/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132335.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132336.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132337.jpg"},"name":"摩根·弗里曼","id":"1054534"},{"alt":"https://movie.douban.com/celebrity/1041179/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132338.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132339.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132340.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://cache.yisu.com/upload/information/20200623/125/132341.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132342.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132343.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://cache.yisu.com/upload/information/20200623/125/132344.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132345.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132346.jpg"},"name":"让·雷诺","id":"1025182"},{"alt":"https://movie.douban.com/celebrity/1054454/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132347.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132348.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132349.jpg"},"name":"娜塔莉·波特曼","id":"1054454"},{"alt":"https://movie.douban.com/celebrity/1010507/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132350.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132351.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132352.jpg"},"name":"加里·奥德曼","id":"1010507"}],"collect_count":1002125,"original_title":"Léon","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1031876/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132353.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132354.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132355.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://cache.yisu.com/upload/information/20200623/125/132356.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132357.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132358.jpg"},"name":"张国荣","id":"1003494"},{"alt":"https://movie.douban.com/celebrity/1050265/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132359.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132360.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132361.jpg"},"name":"张丰毅","id":"1050265"},{"alt":"https://movie.douban.com/celebrity/1035641/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132362.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132363.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132364.jpg"},"name":"巩俐","id":"1035641"}],"collect_count":727900,"original_title":"霸王别姬","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1023040/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132365.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132366.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132367.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://cache.yisu.com/upload/information/20200623/125/132368.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132369.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132370.jpg"},"name":"汤姆·汉克斯","id":"1054450"},{"alt":"https://movie.douban.com/celebrity/1002676/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132371.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132372.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132373.jpg"},"name":"罗宾·怀特","id":"1002676"},{"alt":"https://movie.douban.com/celebrity/1031848/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132374.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132375.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132376.jpg"},"name":"加里·西尼斯","id":"1031848"}],"collect_count":895393,"original_title":"Forrest Gump","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1053564/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132377.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132378.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132379.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://cache.yisu.com/upload/information/20200623/125/132380.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132381.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132382.jpg"},"name":"罗伯托·贝尼尼","id":"1041004"},{"alt":"https://movie.douban.com/celebrity/1000375/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132383.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132384.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132385.jpg"},"name":"尼可莱塔·布拉斯基","id":"1000375"},{"alt":"https://movie.douban.com/celebrity/1000368/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132386.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132387.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132388.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://cache.yisu.com/upload/information/20200623/125/132380.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132381.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132382.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://cache.yisu.com/upload/information/20200623/125/132389.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132390.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132391.jpg"},"name":"柊瑠美","id":"1023337"},{"alt":"https://movie.douban.com/celebrity/1005438/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132392.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132393.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132394.jpg"},"name":"入野自由","id":"1005438"},{"alt":"https://movie.douban.com/celebrity/1045797/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132395.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132396.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132397.jpg"},"name":"夏木真理","id":"1045797"}],"collect_count":801778,"original_title":"千と千尋の神隠し","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054439/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132398.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132399.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132400.jpg"},"name":"宫崎骏","id":"1054439"}],"year":"2001","images":{"small":"https://cache.yisu.com/upload/information/20200623/125/132401.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132402.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132403.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://cache.yisu.com/upload/information/20200623/125/132404.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132405.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132406.jpg"},"name":"连姆·尼森","id":"1031220"},{"alt":"https://movie.douban.com/celebrity/1054393/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132407.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132408.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132409.jpg"},"name":"本·金斯利","id":"1054393"},{"alt":"https://movie.douban.com/celebrity/1006956/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132410.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132411.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132412.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://cache.yisu.com/upload/information/20200623/125/132413.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132414.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132415.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://cache.yisu.com/upload/information/20200623/125/132416.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132417.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132418.jpg"},"name":"莱昂纳多·迪卡普里奥","id":"1041029"},{"alt":"https://movie.douban.com/celebrity/1054446/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132419.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132420.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132421.jpg"},"name":"凯特·温丝莱特","id":"1054446"},{"alt":"https://movie.douban.com/celebrity/1031864/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132422.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132423.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132424.jpg"},"name":"比利·赞恩","id":"1031864"}],"collect_count":823041,"original_title":"Titanic","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1022571/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132425.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132426.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132427.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://cache.yisu.com/upload/information/20200623/125/132416.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132417.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132418.jpg"},"name":"莱昂纳多·迪卡普里奥","id":"1041029"},{"alt":"https://movie.douban.com/celebrity/1101703/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132428.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132429.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132430.jpg"},"name":"约瑟夫·高登-莱维特","id":"1101703"},{"alt":"https://movie.douban.com/celebrity/1012520/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132431.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132432.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132433.jpg"},"name":"艾伦·佩吉","id":"1012520"}],"collect_count":903330,"original_title":"Inception","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1054524/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132434.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132435.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132436.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://cache.yisu.com/upload/information/20200623/125/132437.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132438.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132439.jpg"},"name":"本·贝尔特","id":"1009535"},{"alt":"https://movie.douban.com/celebrity/1000389/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132440.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132441.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132442.jpg"},"name":"艾丽莎·奈特","id":"1000389"},{"alt":"https://movie.douban.com/celebrity/1018022/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132443.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132444.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132445.jpg"},"name":"杰夫·格尔林","id":"1018022"}],"collect_count":586255,"original_title":"WALL·E","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1036450/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132446.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132447.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132448.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://cache.yisu.com/upload/information/20200623/125/132332.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132333.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132334.jpg"},"name":"蒂姆·罗宾斯","id":"1054521"},{"alt":"https://movie.douban.com/celebrity/1054534/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132335.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132336.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132337.jpg"},"name":"摩根·弗里曼","id":"1054534"},{"alt":"https://movie.douban.com/celebrity/1041179/","avatars":{"small":"https://cache.yisu.com/upload/information/20200623/125/132338.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132339.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132340.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://cache.yisu.com/upload/information/20200623/125/132341.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132342.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132343.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://cache.yisu.com/upload/information/20200623/125/132332.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132333.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132334.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://cache.yisu.com/upload/information/20200623/125/132341.jpg","large":"https://cache.yisu.com/upload/information/20200623/125/132342.jpg","medium":"https://cache.yisu.com/upload/information/20200623/125/132343.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实现网络请求有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。