最近在寫一個Demo,然后在想,我要用什么網絡請求才能夠在Demo裝逼,然后翻遍簡書,最后確定了用Retrofit2.0+RxJava來實現網絡請求;下面就簡單的寫下這東西。。
首先,最重要的是導包
Paste_Image.png
這里必須注意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我就不貼出來了;接下來我們就看看請求怎么寫
Paste_Image.png
這里就以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 );
}
好,就這樣我們的請求接口是完成了,接下來那就是請求了
Paste_Image.png
首先要調用初始化,這樣才能夠拿到真正的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!
就這樣,整個過程走完了。