1.添加依赖:
compile 'io.reactivex:rxjava:1.2.7'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
这里需要注意ButterKnife8.5.1的配置方法。
参考:http://blog.youkuaiyun.com/niubitianping/article/details/54893571
2.添加网络权限。
3.添加一个实体类:MovieEntity.java。
API:https://api.douban.com/v2/movie/top250?start=0&count=10
依旧是采用GsonFormt插件自动添加,为了显示可以手动重写toString函数。
4.Service.java:
public interface Service {
@GET("top250")
Observable<MovieEntity> getMovie(@Query("start") int start,
@Query("count") int count);
}
5.网络请求类HttpMethods.java:
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 Service service;
private HttpMethods(){
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(httpClient.build())
.build();
service = retrofit.create(Service.class);
}
private static class SingletonHolder{
private static final HttpMethods INSTANCE = new HttpMethods();
}
public static HttpMethods getInstance(){
return SingletonHolder.INSTANCE;
}
public void getTopMovie(Subscriber<MovieEntity> subscriber, int start, int count){
service.getMovie(start, count)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
}
}
6.activity_main.xml
<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"/>
<TextView
android:id="@+id/result_TV"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/click_me_BN"
android:text="Hello World!"
android:textSize="16sp"/>
7.MainActivity.java
public class MainActivity extends AppCompatActivity {
public static final String API_URL="https://api.douban.com/v2/movie/";
@BindView(R.id.click_me_BN)
Button clickMeBN;
@BindView(R.id.result_TV)
TextView resultTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.click_me_BN)
public void onClick() {
getMovie();
}
//进行网络请求
private void getMovie(){
Subscriber subscriber = 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) {
e.printStackTrace();
}
@Override
public void onNext(MovieEntity o) {
resultTV.setText(o.toString());
}
};
HttpMethods.getInstance().getTopMovie(subscriber, 0, 5);
}
}