转载请注明出处。http://jbblog.top/blogpagecontent.html?id=5
Retrofit2+RxJava+OkHttp项目直接使用
网上有很多讲这些的例子,都是详解需要时间去学习,这里直接带你使用,几分钟直接搭建架构完成使用。
这里我们使用Android Studio构建
- 第一步:引入。
build.gradledependencies{
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
}
-
第二步:创建网络请求。
public class Network {
private static ResultLoginId resultLoginId;
private static OkHttpClient okHttpClient = new OkHttpClient();
private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJavaCallAdapterFactory.create();
public static ResultLoginId getLoginInfoId(){
if (resultLoginId == null) {
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(URLs.API)//请求地址:http://www.jbblog.top/
.addConverterFactory(gsonConverterFactory)
.addCallAdapterFactory(rxJavaCallAdapterFactory)
.build();
resultLoginId = retrofit.create(ResultLoginId.class);
}
return resultLoginId;
}
}
- 第三步:请求注解
public interface ResultLoginId {
@POST("MyBlog/DiaryServlet")
Observable<ResultKey> addDiary(@QueryMap Map<String, String> map);//
}
注意:这里有两个地方需要注意
- 请求返回数据,因为用了gson解析这里返回的必须能gson解析。
ResultKey类:public class ResultKey {
public int success;
public String message;
}
- 请求的参数需要注意的:
@QueryMap:对应参数的方式请求。
@Body:对应请求体方式。
以java服务器获取方式为例:
@Body对应服务器获取方式为:
BufferedReader reader = new BufferedReader(new InputStreamReader(req.getInputStream()));
String body = IOUtils.read(reader);
@QueryMap对应服务器获取方式为:
String name = req.getParameter(“name”);
弄清楚这个就知道以那种方式向服务器传数据了。
-
第三步:页面写请求。
一:protected Subscription subscription;
//==========请求接口相关
protected void unsubscribe() {
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
}
二:
//==========================================delete
Observer<ResultKey> observerd = new Observer<ResultKey>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {//请求失败出现错误。
e.printStackTrace();
}
@Override
public void onNext(ResultKey images) {//成功请求服务器返回结果
Logger.e(images.message+"==================="+id);
if(1==images.success){
adapter.delItem(id);
}
}
};
private void delData(String id) {
unsubscribe();
subscription = Network.getLoginInfoId()
.addDiary(new GetBasePostInfo(this).delDiary(id))//这里上传参数到服务器。看下面参数具体信息
//.map(new GetJieMiResultLoginKey(this))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observerd);
}
public Map<String,String> delDiary(String id){
Map<String, String> info = new HashMap<>();
info.put("id",id);
info.put("type","3");
return info;
}
到这里就结束了。是不是很简单。
请求结果会回调observerd。
这里页面是删除数据直接调用delData(id)方法就可以了,传递id进去就行了,执行完成回调observerd对象。