文章目录
RetrofitRetrofit2的简述Retrofit注解Retrofit案例
RxJava相关概念被观察者Observable的创建方式1.create2.from3.just
订阅者Observer的创建1.new Observer:同时重写onNext、onError、onCompleted2.new ActionX:选择重写其中某个或某些方法
常见操作符mapScheduler:线程控制器filter:集合进行过滤each:遍历集合take:取出集合中的前几个skip:跳过前几个元素
Retrofit
Retrofit2的简述
Retrofit其实我们可以理解为OkHttp的加强版,它也是一个网络加载框架。 底层是使用OKHttp封装的。准确来说,网络请求的工作本质上是OkHttp完成, 而 Retrofit 仅负责网络请求接口的封装。它的一个特点是包含了特别多注解, 方便简化你的代码量。并且还支持很多的开源库(著名例子:Retrofit + RxJava)。 Retrofit和OkHttp都是square公司开发的。 https://square.github.io/retrofit/
Retrofit注解
String url_get
= "http://gank.io/api/";
String url_post
= "http://yun918.cn/study/public/index.php/";
String url_query
= "https://www.wanandroid.com/";
String url_body
= "https://www.wanandroid.com/";
String url_headers
= "https://cdwan.cn/api/";
@GET("data/%E7%A6%8F%E5%88%A9/20/2")
Call
<GetBean> getData();
@POST("data/%E7%A6%8F%E5%88%A9/20/2")
Call
<GetBean> getData2();
@POST("register")
@FormUrlEncoded
Call
<PostBean> getData3(@Field("username") String username
,
@Field("password") String password
,
@Field("phone") String phone
,
@Field("verify") String verify
);
@GET("project/list/1/json")
Call
<QueryBean> getData4(@Query("cid") int cid
);
@POST("register")
@FormUrlEncoded
Call
<PostBean> getData5(@FieldMap Map
<String, String> map
);
@GET("project/list/1/json?")
Call
<QueryBean> getData6(@QueryMap Map
<String, Object> map
);
@POST("user/login")
Call
<BodyBean> getData7(@Body RequestBody requestBody
);
@GET("data/%E7%A6%8F%E5%88%A9/20/{page}")
Call
<GetBean> getData8(@Path("page") int page
);
@GET
Call
<GetBean> getData9(@Url String url_query
);
@POST("cart/add")
@FormUrlEncoded
@Headers("X-Nideshop-Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo1LCJpYXQiOjE1ODMxNjgzMDB9.aqdQNPdW8anMSqaqfAGWNPZxbb6j39tAaV-fOuzNhUM")
Call
<CartBean> getData10(@Field("goodsId") String goodsId
,
@Field("number") String number
,
@Field("productId") String productId
);
@POST("cart/add")
@FormUrlEncoded
Call
<CartBean> getData11(@Header("X-Nideshop-Token") String header
);
Retrofit案例
Retrofit retrofit
= new Retrofit.Builder()
.baseUrl("")
.build();
LoadJson json
= retrofit
.create(LoadJson
.class);
Call
<ResponseBody> call
= json
.loadJsonStr();
call
.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call
<ResponseBody> call
, Response
<ResponseBody> response
) {
try {
String result
= response
.body().string();
Log
.d("amy", "onResponse: "+result
);
} catch (IOException e
) {
e
.printStackTrace();
}
}
@Override
public void onFailure(Call
<ResponseBody> call
, Throwable t
) {
Log
.d("amy", "onFailure: "+t
.getMessage());
}
});
RxJava
相关概念
观察者:Observer; 被观察者:Observable; 订阅(或注册):subscribe()
案例: 观察者:OnClickListener; 被观察者:Button; 订阅(或注册):setOnClickListener()
被观察者Observable的创建方式
1.create
Observable
.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber
<? super Integer
> subscriber
) {
for(int i
= 0;i
<10;i
++){
subscriber
.onNext(i
);
}
subscriber
.onCompleted();
}
}).subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
Log
.d("amy", "onCompleted:");
}
@Override
public void onError(Throwable e
) {
Log
.d("amy", "onError:");
}
@Override
public void onNext(Integer s
) {
Log
.d("amy", "onNext: "+s
);
}
});
案例中,数据是在call方法中循环的。如果已经有集合对象则可以使用from方法来创建Observable。其中just方法中可以放对象(T t);
2.from
Observable
.from(integers
).subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
Log
.d("amy", "onCompleted: "+integers
.size());
}
@Override
public void onError(Throwable e
) {
Log
.d("amy", "onError: ");
}
@Override
public void onNext(Integer integer
) {
Log
.d("amy", "onNext: "+integer
);
}
});
3.just
Observable
.just(integers
).subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
Log
.d("amy", "onCompleted: "+integers
.size());
}
@Override
public void onError(Throwable e
) {
Log
.d("amy", "onError: ");
}
@Override
public void onNext(Integer integer
) {
Log
.d("amy", "onNext: "+integer
);
}
});
订阅者Observer的创建
1.new Observer:同时重写onNext、onError、onCompleted
.subscribe(new Observer<List
<String>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e
) {
}
@Override
public void onNext(List
<String> strings
) {
}
})
2.new ActionX:选择重写其中某个或某些方法
使用Action,Action1表示onNext,onError,Action0表示onCompleted。subscribe方法的添加顺序:依次为onNext,onError,onCompleted
.subscribe(new Action1<List
<String>>() {
@Override
public void call(List
<String> strings
) {
Log
.d("amy", "onNext: "+strings
);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable
) {
Log
.d("amy", "onError: "+throwable
.getMessage());
}
}, new Action0() {
@Override
public void call() {
Log
.d("amy", "onCompleted: ");
}
});
常见操作符
map
用于类型转换,其中用于FuncX,funcX带返回值而ActionX不带返回值。
Observable
.just("Hello", "World")
.map(new Func1<String, Integer>() {
@Override
public Integer
call(String s
) {
return s
.hashCode();
}
})
.map(new Func1<Integer, String>() {
@Override
public String
call(Integer integer
) {
return integer
.intValue() + "";
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String s
) {
Log
.i(TAG
, s
);
}
});
Scheduler:线程控制器
private void rxJavaTest3() {
Observable
.just("Hello", "Word")
.subscribeOn(Schedulers
.newThread())
.observeOn(AndroidSchedulers
.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s
) {
Log
.i(TAG
, s
);
}
});
filter:集合进行过滤
Observable
.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber
<? super Integer
> subscriber
) {
for(int i
= 0;i
<10;i
++){
subscriber
.onNext(i
);
}
subscriber
.onCompleted();
}
}).filter(new Func1<Integer, Boolean>() {
@Override
public Boolean
call(Integer integer
) {
if(integer
< 2)
return true;
else
return false;
}
}).map(new Func1<Integer, String>() {
@Override
public String
call(Integer integer
) {
return integer
+"-- string";
}
})
.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
Log
.d("amy", "onCompleted: ");
}
@Override
public void onError(Throwable e
) {
}
@Override
public void onNext(String integer
) {
Log
.d("amy", integer
);
}
});
each:遍历集合
take:取出集合中的前几个
skip:跳过前几个元素