您的位置:首页 > 编程语言 > Java开发

Retrofit和Rxjava的简单了解

2017-09-05 17:14 561 查看
Retrofit是由square公司开发的,是一个网络开发框架

1.首先使用它的时候,要先导入相关的jar包(一定要版本相同,否则运行的时候会报错)

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'

2.定义一个接口类:

public interface RestService{
@GET("top250")
Observable<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count);
}

3.再单独写一个工具Utils类(导入包的时候注意别导错包)

public class RestClient {
private static final String BASE_URL = "https://api.douban.com/v2/movie/";
private  Retrofit mRetrofit;
private  RestService mService;
private static final int DEFAULT_TIMEOUT = 5;

public RestClient(){
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(DEFAULT_TIMEOUT,TimeUnit.SECONDS);
mRetrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
mService = mRetrofit.create(RestService.class);

}
public RestService getRectService(){
if (mService != null){
return mService;
}
return null;
}
private static class SingletonHolder{
private static final RestClient INSTANCE = new RestClient();
}
public static RestClient getInstance(){
return SingletonHolder.INSTANCE;
}

public void getTopMovie(Subscriber<MovieBean> subscriber, int start , int count){
mService.getTopMovie(start,count)
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
}
}

4.然后在Main界面的点击事件中请求即可

findViewById(R.id.click_me_BN).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getMovie();
}
});

5.
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) {

}

@Override
public void onNext(final MovieBean responseBody) {
runOnUiThread(new Runnable() {
@Override
public void run() {
list = responseBody.getSubjects();
listView.setAdapter(new MovieAdapter(MainActivity.this,list));
}
});

}

};
RestClient.getInstance().getTopMovie(subscriber,0,10);
}


6.布局和modele类的封装就不传了,大家可自己简单写下(参照 网上自己写了写)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: