OkHttp和Retrofit实例
NetworkModule.java提供OkHttp和Retrofit实例
public class NetworkModule {
// 提供OkHttpClient
public static OkHttpClient provideOkHttpClient() { }
// 提供Retrofit实例
public static Retrofit provideRetrofit(OkHttpClient okHttpClient) { }
}provideOkHttpClient()方法体
public static OkHttpClient provideOkHttpClient() {
// 初始化okhttp
OkHttpClient.Builder okhttpClientBuilder = new OkHttpClient.Builder();
// 配置缓存。 AppContext.getInstance():需要配置application,提供一个获取实例的方法
Cache cache = new Cache(AppContext.getInstance().getCacheDir(), Config.NETWORK_CACHE_SIZE);
okhttpClientBuilder.cache(cache);
okhttpClientBuilder.connectTimeout(60, TimeUnit.SECONDS) //连接超时时间
.writeTimeout(60, TimeUnit.SECONDS) //写,也就是将数据发送到服务端超时时间
.readTimeout(60, TimeUnit.SECONDS); //读,将服务端的数据下载到本地
// 调试模式。 Config.DEBUG 即:BuildConfig.DEBUG
if (Config.DEBUG) {
// 创建okhttp日志拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
// 设置日志等级
loggingInterceptor.level(HttpLoggingInterceptor.Level.BASIC);
// 添加到网络框架中
okhttpClientBuilder.addInterceptor(loggingInterceptor);
}
return okhttpClientBuilder.build();
}provideRetrofit(OkHttpClient okHttpClient)方法体,需要传入OkHttp实例
public static Retrofit provideRetrofit(OkHttpClient okHttpClient) {
return new Retrofit.Builder()
// 让retrofit使用okhttp
.client(okHttpClient)
// baseapi地址。Config.ENDPOINT:/archives/5559/
.baseUrl(Config.ENDPOINT)
// 适配rxjava
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
// 使用gson解析json
// 包括请求参数和响应
.addConverterFactory(GsonConverterFactory.create(JSONUtil.createGson()))
// 创建retrofit
.build();
}JSONUtil.java
public class JSONUtil {
public static Gson createGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
// 后端返回的create_at 转成 createAt,安卓发送时createAt 转 create_at
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
return gsonBuilder.create();
}
public static String toJSON(Object data) {
return createGson().toJson(data);
}
/**
* 将Json转为对象
*
* @param data
* @param clazz
* @param <T>
* @return
*/
public static <T> T fromJSON(String data, Class<T> clazz) {
//通过gson转换
return createGson()
.fromJson(data, clazz);
}
}service接口
一个service方法就是一个请求接口
public interface DefaultService {
// 请求:v1/sheets?category=${Category}&size=${size}
// 这个方法会拼接上在retrofit设置的baseUrl
@GET("v1/sheets")
Observable<JsonObject> sheets(@Query(value = "category") String Category, @Query(value = "size") int size);
}JsonObject可以改成请求接口数据的模型类,这里直接解析为json字符串,没有转为java模型。
使用
retrofit创建service实例,请求service接口:
private DefaultService service;
...
OkHttpClient okHttpClient = NetworkModule.provideOkHttpClient();
Retrofit retrofit = NetworkModule.provideRetrofit(okHttpClient);
service = retrofit.create(DefaultService.class);
binding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testRetrofitGet();
}
});
/**
* Retrofit Get
*/
private void testRetrofitGet() {
service.sheets(null, 10)
// 网络执行在子线程
.subscribeOn(Schedulers.io())
// 请求完成,观察者在主线程执行(onSubscribe,onNext,onError,onComplete)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<JsonObject>() {
// subscribe调用执行
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.d(TAG, "onSubscribe" );
}
// 请求完成执行
@Override
public void onNext(@NonNull JsonObject jsonObject) {
Log.d(TAG, "onNext" + jsonObject);
}
// 请求失败执行
@Override
public void onError(@NonNull Throwable e) {
Log.d(TAG, "onError" + e.getMessage());
}
// 请求完成不管成功失败都执行
@Override
public void onComplete() {
Log.d(TAG, "onComplete" );
}
});
}
Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.
1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino
我一直梦想, 看到你们相册那样的地方。真棒。
我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。
我热爱这样的想法, 去那么多国家。真的很鼓舞。
能感受到热爱。继续保持 感受。
我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。
1
1
1