最近在写一个Demo,然后在想,我要用什么网络请求才能够在Demo装逼,然后翻遍简书,最后确定了用Retrofit2.0+RxJava来实现网络请求;下面就简单的写下这东西。。
首先,最重要的是导包
这里必须注意Retrofit2.0的几个包的版本必须相同,一定要注意!完成之后,我们开始初始化Retrofit2.0。在Application里面
public static Retrofit getApiRetrofit() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//这里是添加RxJava工厂
.addConverterFactory(GsonConverterFactory.create())//这里是添加Gson工厂
.baseUrl(getPath()) //请求地址
.build();
}
return retrofit;
}
Path我就不贴出来了;接下来我们就看看请求怎么写
这里就以Interface的方式来写请求。
/**
* Created by Chen Ri Ming on 2016/10/25.
* 登录接口
*/
public interface LoginService {
@POST("index/login")//这里请求时POST请求,所有在这里写的是@POST,如果是GET请求,那么就是@GET,括号里面就是你的登录接口。
//以Observable开始就是RxJava的形式去请求网络,如果是Call,那就是单纯的使用Retrofit了。
Observable<LoginBean> login(
@Header("sign")String sign,//@Heander这个表示是请求头,("sign")表示请求字段,String sign,这也就是参数了。
@Header("time")int time,
@Query("username")String username,//@Query是请求参数,("username")是请求时要传的参数,String username是需要上传的参数
@Query("password")String password );
}
好,就这样我们的请求接口是完成了,接下来那就是请求了
首先要调用初始化,这样才能够拿到真正的Retrofit。拿到之后,那么就开始写请求了。
final LoginService loginService = retrofit.create(LoginService.class);
loginService.login(MingTuApplication.getSgin(),MingTuApplication.getTime(),currentUsername,currentPassword)
.subscribeOn(Schedulers.newThread())//请求在新的线程中执行请求
.observeOn(Schedulers.io()) //请求完成后在io线程中执行
.observeOn(AndroidSchedulers.mainThread())//在主线程中执行
.subscribe(new Subscriber<LoginBean>() {
@Override
public void onCompleted() {
//走完整个请求之后进入这个方法
}
@Override
public void onError(Throwable e) {
//请求错误的时候走的方法
Log.d("error_login",e.getMessage());
}
@Override
public void onNext(LoginBean loginBean) {
//请求成功之后走的方法
switch (loginBean.getCode()){
case 1000:
String uid = loginBean.getData().getUid();
String gender = loginBean.getData().getGender();
String avater =loginBean.getData().getLogo();
String profession =loginBean.getData().getProfession();
String reg_time = loginBean.getData().getReg_time();
String username = loginBean.getData().getUsername();
String token = loginBean.getData().getToken();
String nickname = loginBean.getData().getNickname();
SharedPreferences sharedPreferences = MingTuApplication.applicationContext.getSharedPreferences("userlogincall",MODE_APPEND);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("uid",uid);
editor.putString("gender",gender);
editor.putString("avater",avater);
editor.putString("profession",profession);
editor.putString("reg_time",reg_time);
editor.putString("username",username);
editor.putString("nickname",nickname);
editor.putString("token",token);
editor.apply();
UserInfoCacheSvc.createOrUpdate(uid,username,avater);
getloginHX(uid);
break;
default:
ToastUtils.ToastMessage(LoginActivity.this,"错误"+loginBean.getCode());
break;
}
}
});
这里就是完整的请求过程,看起来是很漂亮的,很完整的。Nice!
就这样,整个过程走完了。