
一、Retrofit2基本用法
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
1.初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://m.maoyan.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
2.初始化GET、POST接口
无参数GET请求
/*
* 猫眼电影影院
* http://m.maoyan.com/cinemas.json
*/
@GET("cinemas.json")
Call<CinemaInfo> getCinemas();
动态的GET请求
/*
* 查看电影详情
* http://m.maoyan.com/movie/xxxx.json
*/
@GET("movie/{movieId}")
Call<MovieDetail> getMovieDetail(@Path("movieId") String movieId);
带参数的GET请求
/*
* 猫眼电影列表
* http://m.maoyan.com/movie/list.json?type=hot&offset=0&limit=1000
*/
@GET("movie/list.json")
Call<MovieHot> getMovie(@Query("type") String type, @Query("offset") int offset, @Query("limit") int limit);
带json字符串的POST请求
@POST("user_register")
Call<RegisterResult> userRegister(@Body UserInfo userInfo);
带键值对的POST请求
@POST("user_login")
@FormUrlEncoded
Call<LoginResult> userLogin(@Field("username") String username, @Field("password") String password);
3.开始请求
RetrofitApi retrofitApi = retrofit.create(RetrofitApi.class);
retrofitApi .getCinemas().enqueue(new Callback<CinemaInfo>() {
@Override
public void onResponse(Call<CinemaInfo> call, Response<CinemaInfo> response) {
if (response.isSuccessful()) {
CinemaInfo cinemaInfo = response.body();
int status = cinemaInfo.getStatus();
System.out.println("status:" + status);
int expires = cinemaInfo.getControl().getExpires();
System.out.println("expires:" + expires);
}
}
@Override
public void onFailure(Call<CinemaInfo> call, Throwable t) {
}
});
二、RxJava2基本用法
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.7'
Observable(被观察者)/Observer(观察者)
Flowable(被观察者)/Subscriber(观察者)

Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(@NonNull ObservableEmitter<Integer> e) throws Exception {
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull Integer integer) {
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
三、Retrofit2+RxJava
1.初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://m.maoyan.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
2.请求API变化
/*
* 猫眼电影列表
* http://m.maoyan.com/movie/list.json?type=hot&offset=0&limit=1000
*/
@GET("movie/list.json")
Observable<MovieHot> getMovie(@Query("type") String type, @Query("offset") int offset, @Query("limit") int limit);
3.开始请求
RetrofitApi retrofitApi = retrofit.create(RetrofitApi.class);
Observable<MovieHot> observable = retrofitApi.getMovie("hot", 0, 5);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MovieHot>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
System.out.println("onSubscribe");
}
@Override
public void onNext(@NonNull MovieHot movieHot) {
if (movieHot.getStatus() == 0) {
System.out.println("size:-----" + movieHot.getData().getMovies().size());
}
}
@Override
public void onError(@NonNull Throwable e) {
System.out.println("onError");
}
@Override
public void onComplete() {
System.out.println("onComplete");
}
});
四、RetrofitUtil
public class RetrofitUtil {
private volatile static RetrofitUtil retrofitUtil;
private ApiService apiService;
private RetrofitUtil() {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.cache(new Cache(new File(Environment.getExternalStorageDirectory() + "/MoviewMan"), 1024 * 1024 * 8))
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://m.maoyan.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
apiService = retrofit.create(ApiService.class);
}
public static RetrofitUtil getInstance() {
if (retrofitUtil == null) {
synchronized (RetrofitUtil.class) {
if (retrofitUtil == null) {
retrofitUtil = new RetrofitUtil();
}
}
}
return retrofitUtil;
}
public ApiService getApiService() {
return apiService;
}
}
网友评论