標籤:art idg void ttext entity scheduler view tle click
1,現在響應式編程也是越來越多在項目中使用了,剛好上篇我們簡單了介紹了一下Retrofit,那麼我們來開始試著兩個一起用吧,不過不瞭解RxJava的同學可以先去看一看這個文章(挺好的):http://gank.io/post/560e15be2dca930e00da1083#toc_27
2,接著我們上一個項目的寫,怎麼添加RxJava到我們網路請求架構中呢,首先我們得修改Service的代碼為
public interface MovieService { @GET("top250") Observable<MovieEntity> getTopMovie(@Query("start") int start, @Query("count") int count);}
然後我們Activity中的getMovie()方法修改為
package com.qianmo.retrofitdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.qianmo.retrofitdemo.entry.MovieEntity;import com.qianmo.retrofitdemo.http.MovieService;import butterknife.Bind;import butterknife.ButterKnife;import butterknife.OnClick;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;public class MainActivity extends AppCompatActivity { @Bind(R.id.tv_show) TextView tvShow; @Bind(R.id.btn_request) Button btnRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick({R.id.btn_request}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_request: getMovie(); break; } } //請求網路資料 private void getMovie() {// //https://api.douban.com/v2/movie/top250?start=0&count=10 目標地址// String baseUrl = "https://api.douban.com/v2/movie/";//// //建立Retrofit對象// Retrofit retrofit = new Retrofit.Builder()// .baseUrl(baseUrl)// .addConverterFactory(GsonConverterFactory.create())// .build();//// MovieService movieService = retrofit.create(MovieService.class);// Call<MovieEntity> call = movieService.getTopMovie(0, 10);// call.enqueue(new Callback<MovieEntity>() {// @Override// public void onResponse(Call<MovieEntity> call, Response<MovieEntity> response) {// tvShow.setText(response.body().getTitle());// }//// @Override// public void onFailure(Call<MovieEntity> call, Throwable t) {// tvShow.setText(t.getMessage());// }// }); String baseUrl = "https://api.douban.com/v2/movie/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); MovieService movieService = retrofit.create(MovieService.class); movieService.getTopMovie(0, 10) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<MovieEntity>() { @Override public void onCompleted() { Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show(); } @Override public void onError(Throwable e) { tvShow.setText(e.getMessage()); } @Override public void onNext(MovieEntity movieEntity) { tvShow.setText(movieEntity.getTitle()); } }); }}
這樣我們就簡單的把RxJava整合過來了
Android--Retrofit+RxJava