引入包
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.squareup.okio:okio:1.5.0'
//rxjava
compile 'io.reactivex:rxjava:1.2.0'
compile 'io.reactivex:rxandroid:1.2.1'
定義訂閱者
/**
* Created by 87901 on 2016/5/5.
* RxJava中的訂閱者
*/
public class BaseSubscriber<T> extends Subscriber<T> {
private Context context;
public BaseSubscriber(Context context){
this.context=context;
}
@Override
public void onStart() {
}
@Override
public void onNext(T t) {
Toast.makeText(context, ((BaseBean) t).msg,Toast.LENGTH_SHORT).show();
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
try {
Toast.makeText(context, "網(wǎng)絡(luò)錯(cuò)誤",Toast.LENGTH_SHORT).show();
}catch (Exception e){
e.printStackTrace();
}
}
}
定義Http請(qǐng)求類
public class HttpHelp {
private static Retrofit instance;
private HttpHelp(){}
/**
* 不需要在請(qǐng)求頭添加?xùn)|西,可以做成單例模式
* @return
*/
public static Retrofit getInstance(){
if (instance==null){
synchronized (HttpHelp.class){
if (instance==null){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.retryOnConnectionFailure(true)
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(600,TimeUnit.SECONDS)
.writeTimeout(600,TimeUnit.SECONDS)
.build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
instance = new Retrofit.Builder()
.baseUrl(Constants.HOST)
.client(client)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
}
}
return instance;
}
}
定義接口
public interface RemoteApi {
//獲取熱門城市
@GET("search/hots")
Observable<BaseBean<Object>> getHotSearchData();
//登錄
@POST("/api/user/login")
@FormUrlEncoded
Observable<BaseBean<LoginBean>> login(@Field("username") String username, @Field("password") String password);
...
}
調(diào)用
HttpHelp.getInstance().create(RemoteApi.class).login(etPhoneNumber.getText().toString().trim()
,etPassword.getText().toString().trim())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BaseSubscriber<BaseBean<LoginBean>>(LoginActivity.this) {
@Override
public void onNext(BaseBean<LoginBean> baseBean) {
super.onNext(baseBean);
//處理請(qǐng)求成功后的業(yè)務(wù)邏輯
}
@Override
public void onError(Throwable throwable) {
super.onError(throwable);
//請(qǐng)求異常
}
});