依赖引入
//Gson
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
//OkHttp3
implementation 'com.squareup.okhttp3:okhttp:4.4.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.4.0'
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
//RxAndroid
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
封装
public class RetrofitClient {
private static volatile RetrofitClient retrofitClient;
private Retrofit retrofit;
private OkHttpClient okHttpClient;
private ApiService apiService;
private static final String baseUrl = "https://www.baidu.com/";
private RetrofitClient() {}
//单例
public static RetrofitClient getInstance() {
if (retrofitClient == null) {
synchronized (RetrofitClient.class) {
if (retrofitClient == null) {
retrofitClient = new RetrofitClient();
}
}
}
return retrofitClient;
}
//okhttp设置
private OkHttpClient getOkHttpClient() {
if (null == okHttpClient) {
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//连接超时
.readTimeout(10, TimeUnit.SECONDS)//读取超时
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))//设置日志拦截器
.build();
okHttpClient.writeTimeoutMillis();
okHttpClient.followRedirects();
}
return okHttpClient;
}
//Retrofit设置
private Retrofit getRetrofit() {
if (null == retrofit) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())//设置数据解析器
.client(getOkHttpClient())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//网络适配,支持RxJava与RxAndroid
.build();
}
return retrofit;
}
//接口
public ApiService getApiService() {
if (null == apiService)
apiService = getRetrofit().create(ApiService.class);
return apiService;
}
}
API接口
public interface ApiService {
// 因为上面的方法封装中把url写全了,这里的post里面写个【/】,这里不能为空
@POST("/")
Observable<数据Bean> postBeanData(@Body RequestBody requestBody);
}
使用
//首先创建一个Bean保存数据
String json = new Gson.toJson(数据Bean);
//代码调用
ApiService apiService = RetrofitClient.getInstance().getApiService();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType, json);
apiService.postBeanData(requestBody).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<SensorBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(SensorBean value) {
Log.e("api", "上传的数据:" + value.toString());
}
@Override
public void onError(Throwable e) {
Log.e("api", "上传错误信息返回:" + e.toString());
}
@Override
public void onComplete() {
}
});