Day4-3 rxjava+rxandroid+retrofit+okhttp完成网络请求
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Day4-3 rxjava+rxandroid+retrofit+okhttp完成网络请求,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4352字,纯文字阅读大概需要7分钟。
内容图文
Day4-3 rxjava+rxandroid+retrofit+okhttp完成网络请求
一.依赖:
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
//日志
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
//网络请求框架
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
//ConverterFactory的GSON依赖包 GSON插件 网络请求回来自动解析
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
//CallAdapterFactory的Rx依赖包 使用RxJava 线程异常任务调度
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
二.RetrofitManager(单例编写)
public class RetrofitManager {
private static RetrofitManager retrofitManager;
public static String BASE_URL;
public static RetrofitManager getInstance() {
if (retrofitManager == null) {
retrofitManager = new RetrofitManager();
}
return retrofitManager;
}
private Retrofit retrofit;
public Retrofit getRetrofit() {
if (retrofit == null) {
buildRetrofit();
}
return retrofit;
}
private void buildRetrofit() {
//log拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder okBuilder = new OkHttpClient.Builder();
okBuilder.readTimeout(10, TimeUnit.MINUTES);
okBuilder.connectTimeout(2, TimeUnit.MINUTES);
okBuilder.addInterceptor(loggingInterceptor);
Retrofit.Builder builder = new Retrofit.Builder();
builder.baseUrl(BASE_URL);
builder.addConverterFactory(GsonConverterFactory.create());
builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());
builder.client(okBuilder.build());
retrofit = builder.build();
}
}
三.APi接口编写
public interface Api {
//和Rxjava结合
@GET("/ios/cf/dish_list.php?stage_id=1&limit=20&page=1")
Observable<Food> getFoodCall();
}
四.activity调用
public class MainActivity extends AppCompatActivity {
private static final String TAG ="ytx" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Api api = RetrofitManager.getInstance().getRetrofit().create(Api.class);
Observable<Food> foodCall = api.getFoodCall();
foodCall.subscribeOn(Schedulers.io())//子线程中网络请求数据
.observeOn(AndroidSchedulers.mainThread())//主线程中吐司
.subscribe(new Observer<Food>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Food food) {
Toast.makeText(MainActivity.this, ""+food.getData().size(), Toast.LENGTH_SHORT).show();
}
@Override
public void one rror(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
五.嵌套查询:
1.根据歌手查询歌曲信息
http://musicapi.leanapp.cn/search/suggest?keywords=邓紫棋
2.根据歌曲id查询歌曲mp3地址
http://musicapi.leanapp.cn/music/url?id=1405283464
public interface MusicApi {
@GET("/search/suggest?keywords=邓紫棋")
Observable<Music> getMusic();
@GET("/music/url")
Observable<MusicReslut> getMusicById(@Query("id") String id);
}
public interface MusicApi {
@GET("/search/suggest?keywords=邓紫棋")
Observable<Music> getMusic();
@GET("/music/url")
Observable<MusicReslut> getMusicById(@Query("id") String id);
}
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://musicapi.leanapp.cn/")
.build();
final MusicApi musicApi = retrofit.create(MusicApi.class);
musicApi.getMusic()
.subscribeOn(Schedulers.io())
.flatMap(new Function<Music, Observable<Music.ResultBean.SongsBean>>() {
@Override
public Observable<Music.ResultBean.SongsBean> apply(Music music) throws Exception {
return Observable.fromIterable(music.getResult().getSongs());
}
})
.flatMap(new Function<Music.ResultBean.SongsBean, Observable<MusicReslut>>() {
@Override
public Observable<MusicReslut> apply(Music.ResultBean.SongsBean songsBean) throws Exception {
return musicApi.getMusicById(songsBean.getId()+"");
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MusicReslut>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(MusicReslut musicReslut) {
String url = musicReslut.getData().get(0).getUrl();
Log.d(TAG, "onNext: "+url);
}
@Override
public void one rror(Throwable e) {
}
@Override
public void onComplete() {
}
});
六.总结:使用rxjava+retrofit的好处
- 线程调度方便
- 嵌套查询方便
内容总结
以上是互联网集市为您收集整理的Day4-3 rxjava+rxandroid+retrofit+okhttp完成网络请求全部内容,希望文章能够帮你解决Day4-3 rxjava+rxandroid+retrofit+okhttp完成网络请求所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。