最近在寫一個Demo木西,然后在想乐埠,我要用什么網(wǎng)絡(luò)請求才能夠在Demo裝逼,然后翻遍簡書禽篱,最后確定了用Retrofit2.0+RxJava來實現(xiàn)網(wǎng)絡(luò)請求畜伐;下面就簡單的寫下這東西。躺率。
首先玛界,最重要的是導(dǎo)包
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,括號里面就是你的登錄接口努溃。
//以O(shè)bservable開始就是RxJava的形式去請求網(wǎng)絡(luò)硫嘶,如果是Call,那就是單純的使用Retrofit了梧税。
Observable<LoginBean> login(
@Header("sign")String sign,//@Heander這個表示是請求頭沦疾,("sign")表示請求字段,String sign第队,這也就是參數(shù)了哮塞。
@Header("time")int time,
@Query("username")String username,//@Query是請求參數(shù),("username")是請求時要傳的參數(shù)凳谦,String username是需要上傳的參數(shù)
@Query("password")String password );
}
好忆畅,就這樣我們的請求接口是完成了,接下來那就是請求了
Paste_Image.png
首先要調(diào)用初始化尸执,這樣才能夠拿到真正的Retrofit家凯。拿到之后缓醋,那么就開始寫請求了。
final LoginService loginService = retrofit.create(LoginService.class);
loginService.login(MingTuApplication.getSgin(),MingTuApplication.getTime(),currentUsername,currentPassword)
.subscribeOn(Schedulers.newThread())//請求在新的線程中執(zhí)行請求
.observeOn(Schedulers.io()) //請求完成后在io線程中執(zhí)行
.observeOn(AndroidSchedulers.mainThread())//在主線程中執(zhí)行
.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驯镊!
就這樣葫督,整個過程走完了。