package com.mcxtzhang.rxjava2demo.retrofit;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import com.mcxtzhang.rxjava2demo.R;
import com.mcxtzhang.rxjava2demo.retrofit.model.douban.MovieService;
import com.mcxtzhang.rxjava2demo.retrofit.model.douban.bean.Base.HttpResult;
import com.mcxtzhang.rxjava2demo.retrofit.model.douban.bean.DouBanMovieBean;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitDemoActivity extends AppCompatActivity {
private static final String TAG = "zxt/RetrofitDemo";
@Bind(R.id.click_me_BN)
Button clickMeBN;
@Bind(R.id.result_TV)
TextView resultTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retrofit_demo);
ButterKnife.bind(this);
}
@OnClick(R.id.click_me_BN)
public void onClick() {
getMovie();
}
//进行网络请求
private void getMovie() {
String baseUrl = "https://api.douban.com/v2/movie/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
//gson 自动解析实体
.addConverterFactory(GsonConverterFactory.create())
//可以自动转成rxjava的Observable
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
MovieService movieService = retrofit.create(MovieService.class);
// 1 原始模式
Call<DouBanMovieBean> topMovieCall = movieService.getTopMovie(0, 10);
topMovieCall.enqueue(new Callback<DouBanMovieBean>() {
@Override
public void onResponse(Call<DouBanMovieBean> call, Response<DouBanMovieBean> response) {
DouBanMovieBean body = response.body();
resultTV.setText(body.toString());
}
@Override
public void onFailure(Call<DouBanMovieBean> call, Throwable t) {
resultTV.setText(t.getMessage());
}
});
//2 结合Rxjava
/* movieService.getDoubanTopMovie(0, 10)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RawMovieBean>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "onSubscribe() called with: d = [" + d + "]");
}
@Override
public void onNext(RawMovieBean value) {
Log.d(TAG, "onNext() called with: value = [" + value + "]");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError() called with: e = [" + e + "]");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete() called:" ;
}
});*/
//3 封装
HttpUtil.getInstance().getDoubanTopMovie(0, 10)
.subscribe(new Consumer<HttpResult<List<DouBanMovieBean>>>() {
@Override
public void accept(HttpResult<List<DouBanMovieBean>> listHttpResult) throws Exception {
resultTV.setText(listHttpResult.getData().get(1).getTitle());
}
});
}
}