那麽今天主要要用RxJava来结合retrofit做Post的部分,与上次用Retrofit的call类似,但这次是要用Observe(被观察者)来做,json假资料:posts,那麽首先先加入依赖。
老样子,在gradle:app的dependcies加入依赖及retrofit需要用到的网路权限,今天要加入的比较多。
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
将网路的权限加入至AndroidManifest.xml中。
<uses-permission android:name="android.permission.INTERNET" />
接着我们就开始进行设计,首先一样宣告posts的Model,定义网站的四个data(userId、Id、Title、Body)然後+getter、setter,一样可由右键->generate->gsonformatplus新增(需先安装plugins):
public class Model {
private Integer userId;
private Integer id;
private String title;
private String body;
public Model(Integer userId , Integer id , String title , String body){
this.userId=userId;
this.id=id;
this.title=title;
this.body=body;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
Model这边定义完资料後,那麽接着就看到接口Interface。
//@POST("posts")
//Call<Model> getCall(@Body Model data);
@POST("posts")
Observable<Response<Model>> getCall(@Body Model data);//宣告成Observable<Response<?>>,接收Response物件(回传的东西)
比较不一样的是之前是用Call来进行呼叫,而这次是要宣告成Observable(被观察者)然後从主程序使用Observer(观察者)将资料读出。
public class Manager {
private static Manager mInstance = new Manager();
private MyApiService myApiService;
private Manager() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//新增此行,rxjava创建Observable对象的调配器(红字的话要检查gradle有没有安装rxjava2-adapter的依赖)
.build();
myApiService = retrofit.create(MyApiService.class);
}
public static Manager getInstance() {
return mInstance;
}
public MyApiService getAPI() {
return myApiService;
}
}
接着可能会简单的带到subscribeOn与observeOn这些线程操作。
public class MainActivity extends AppCompatActivity {
Observable<Response<Model>> model;//被观察者object
MyApiService myApiService;//api interface object
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Model data=new Model(10,20,"This is a title","This is a body");//新增的资料
myApiService=Manager.getInstance().getAPI();
model = myApiService.getCall(data);//使用getCall方法
model.subscribeOn(Schedulers.io())//I/O模式,可指定Observer在特定的调度上观察Observable
.observeOn(AndroidSchedulers.mainThread())//指定Observable在特定的调度上进行动作
.subscribe(new Observer<Response<Model>>() {//订阅建立观察者
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Response<Model> value) {
Log.d("Post",""+value.code());
Log.d("Post","userid:"+value.body().getUserId());
Log.d("Post","id:"+value.body().getId());
Log.d("Post","title:"+value.body().getTitle());
Log.d("Post","body:"+value.body().getBody());
}
@Override
public void onError(Throwable e) {
Log.d("Post","Error");
}
@Override
public void onComplete() {
}
});
}
}
<<: Epoch(时期)、Batch size(批次)、Iteration(迭代)、Learning rate
今天要介绍下拉式选单,写法非常简单,直接来看程序码范例 <select> <opt...
Doc modification 今天又花了不少时间更新文件,主要是加入魔法的设定。为了要了解哪些魔...
以.NET Framework来说,网页技术必备要会的有WebForm,MVC,WebAPI三种技术...
制作文件系统首页 先将使用者的个人资料页做好 回到docsystem_5 django-admin ...
AMP & the missing parts Google doesn't tell 讲...