当前位置: 首页 > news >正文

网页设计移动端尺寸大小厦门关键词seo排名网站

网页设计移动端尺寸大小,厦门关键词seo排名网站,网站建设xiu021,推广赚钱的项目Retrofit RxJava OkHttp 是 Android 开发中常用的网络请求库组合。Retrofit 是一个类型安全的 HTTP 客户端#xff0c;RxJava 是一个响应式编程库#xff0c;OkHttp 是一个高效的 HTTP 客户端。 Retrofit RxJava OkHttp 的组合可以提供以下功能#xff1a; 职责清晰 R…Retrofit RxJava OkHttp 是 Android 开发中常用的网络请求库组合。Retrofit 是一个类型安全的 HTTP 客户端RxJava 是一个响应式编程库OkHttp 是一个高效的 HTTP 客户端。 Retrofit RxJava OkHttp 的组合可以提供以下功能 职责清晰 RetrofitClient 负责 Retrofit 和 OkHttp 的初始化。 ApiServiceHelper 负责动态创建 API 服务实例。 NetworkHelper 负责发起网络请求和处理结果。 1. 动态配置 Retrofit 和 OkHttp 允许在运行时动态修改 Retrofit 和 OkHttp 的配置例如 Base URL、超时时间、拦截器等。 统一错误处理 增强错误处理的灵活性支持自定义错误处理器。 支持多环境切换 通过配置文件或 Build Variants 动态切换测试环境和生产环境。 添加缓存机制 通过 OkHttp 的缓存拦截器实现本地缓存减少网络请求。 Token 自动管理 通过拦截器自动添加 Token 并处理 Token 过期。 支持文件上传/下载 扩展 API 服务接口支持文件操作。 日志优化 根据不同的 Build 类型Debug/Release动态调整日志级别。 生命周期绑定 将网络请求与 Activity/Fragment 的生命周期绑定避免内存泄漏。 代码如下 RetrofitClient支持动态配置 import okhttp3.Cache; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import java.io.File; import java.util.concurrent.TimeUnit;public class RetrofitClient {private static Retrofit retrofit;private static OkHttpClient okHttpClient;private RetrofitClient() {// 私有构造函数防止外部实例化}public static Retrofit getRetrofit() {if (retrofit null) {synchronized (RetrofitClient.class) {if (retrofit null) {retrofit new Retrofit.Builder().baseUrl(https://api.example.com/) // 默认 Base URL.client(getOkHttpClient()).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava3CallAdapterFactory.create()).build();}}}return retrofit;}public static OkHttpClient getOkHttpClient() {if (okHttpClient null) {synchronized (RetrofitClient.class) {if (okHttpClient null) {OkHttpClient.Builder builder new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).readTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS);// 添加缓存10MBFile cacheDir new File(System.getProperty(java.io.tmpdir), http-cache);builder.cache(new Cache(cacheDir, 10 * 1024 * 1024));// 添加日志拦截器仅在 Debug 模式下启用if (BuildConfig.DEBUG) {HttpLoggingInterceptor logging new HttpLoggingInterceptor();logging.setLevel(HttpLoggingInterceptor.Level.BODY);builder.addInterceptor(logging);}okHttpClient builder.build();}}}return okHttpClient;}/*** 动态修改 Base URL*/public static void setBaseUrl(String baseUrl) {retrofit new Retrofit.Builder().baseUrl(baseUrl).client(getOkHttpClient()).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava3CallAdapterFactory.create()).build();}/*** 动态修改 OkHttp 配置*/public static void setOkHttpClient(OkHttpClient client) {okHttpClient client;retrofit new Retrofit.Builder().baseUrl(retrofit.baseUrl().toString()).client(okHttpClient).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava3CallAdapterFactory.create()).build();} }NetworkHelper支持自定义错误处理器 import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.disposables.Disposable;public class NetworkHelper {/*** 发起网络请求** param single RxJava 的 Single 对象* param successHandler 成功回调* param errorHandler 失败回调* return Disposable 对象用于取消订阅*/public static T Disposable request(SingleT single, OnSuccessT successHandler, OnError errorHandler) {return single.subscribeOn(Schedulers.io()) // 在 IO 线程执行网络请求.observeOn(AndroidSchedulers.mainThread()) // 在主线程处理结果.subscribe(successHandler::onSuccess, // 成功回调throwable - errorHandler.onError(handleError(throwable)) // 失败回调);}/*** 统一处理错误*/private static String handleError(Throwable throwable) {if (throwable instanceof IOException) {return 网络连接失败请检查网络设置;} else if (throwable instanceof HttpException) {return 服务器错误请稍后重试;} else {return 未知错误 throwable.getMessage();}}// 成功回调接口public interface OnSuccessT {void onSuccess(T result);}// 失败回调接口public interface OnError {void onError(String errorMessage);} }ApiServiceHelper import java.lang.reflect.Proxy;public class ApiServiceHelper {/*** 创建 API 服务实例** param serviceClass API 服务接口类* return API 服务实例*/public static T T createService(ClassT serviceClass) {return (T) Proxy.newProxyInstance(serviceClass.getClassLoader(),new Class?[]{serviceClass},(proxy, method, args) - {// 通过 Retrofit 创建真正的 API 服务实例T service RetrofitClient.getRetrofit().create(serviceClass);// 调用方法并返回结果return method.invoke(service, args);});} }ApiResponse:统一封装响应基类 public class ApiResponseT {private int code; // 状态码private String message; // 消息private T data; // 数据// 无参构造函数public ApiResponse() {}// 全参构造函数public ApiResponse(int code, String message, T data) {this.code code;this.message message;this.data data;}// Getter 和 Setter 方法public int getCode() {return code;}public void setCode(int code) {this.code code;}public String getMessage() {return message;}public void setMessage(String message) {this.message message;}public T getData() {return data;}public void setData(T data) {this.data data;}// toString 方法Overridepublic String toString() {return ApiResponse{ code code , message message \ , data data };} }User.java类 public class User {private int id;private String name;private String email;// 无参构造函数public User() {}// 全参构造函数public User(int id, String name, String email) {this.id id;this.name name;this.email email;}// Getter 和 Setter 方法public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}// toString 方法Overridepublic String toString() {return User{ id id , name name \ , email email \ };} }ApiService服务类 import io.reactivex.rxjava3.core.Single; import okhttp3.MultipartBody; import okhttp3.ResponseBody; import retrofit2.http.*;public interface ApiService {// 获取用户信息GET(users/{username})SingleUser getUser(Path(username) String username);// 搜索用户GET(users/search)SingleListUser searchUsers(Query(query) String query);// 创建用户POST(users)SingleUser createUser(Body User user);// 文件上传MultipartPOST(upload)SingleApiResponseString uploadFile(Part MultipartBody.Part file);// 文件下载StreamingGET(files/{filename})SingleResponseBody downloadFile(Path(filename) String filename); }在业务层调用 public class MainActivity extends AppCompatActivity {private Disposable disposable; // 用于保存 Disposable 对象Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 创建 API 服务实例ApiService apiService ApiServiceHelper.createService(ApiService.class);// 发起网络请求disposable NetworkHelper.request(apiService.getUser(john_doe),user - {// 处理成功结果Log.d(User, user.toString());},errorMessage - {// 处理错误Log.e(Error, errorMessage);});}Overrideprotected void onDestroy() {super.onDestroy();// 取消网络请求避免内存泄漏if (disposable ! null !disposable.isDisposed()) {disposable.dispose();}} }
http://www.pierceye.com/news/927279/

相关文章:

  • 手把手做网站wordpress secondary title
  • 服装网站建设课程品牌网站怎么建立
  • 广州市网站建设怎么样企业网站上的二维码怎么获得
  • 网站建设与优化标准图片外链上传网站
  • 网站开发实战第二章网站搜索引擎怎么做
  • 网站建设的定位企业官网
  • 石大网页设计与网站建设客观题网站建设与制作布局
  • 成都智能建站模板品牌网站设计制作公司推荐
  • 出口贸易公司网站怎么做织梦php网站
  • 锦州建设工程信息网站wordpress 签到 插件下载
  • 枣庄定制网站建设公司移动端包括哪些
  • 品牌网站建设定位网页制作模板源代码免费
  • 网站建设公司是什么毅冰做外贸是哪个网站
  • 做资料分享网站有哪些网站设计建设维护与更新
  • 国外开源 企业网站建设网站经营范围
  • 做棋牌游戏网站云南软件开发
  • 广州做网站哪家好福州微信网站开发
  • 网站建设:做网站是不是很麻烦
  • 网站开发合同官司python能开发app吗
  • 福建建设厅网站简历表格 个人简历手机版
  • 重庆企业网站定制开发公司重庆城乡建设子网站
  • 网站地图怎么做html公司文化的建设对个人的意义
  • html网站模板免费下载台州网站制作 外贸
  • 有关建筑网站建设方案案例平台网站建设哪家有
  • 网站域名跳转是怎么做的空间一个数据库可以做几个网站
  • asp网站幻灯片不显示微商刚起步怎么找客源
  • 婚恋网站翻译可以做吗科技局网站建设方案
  • 长沙哪里学网站建设德阳做网站的公司
  • 制作短链接网站做抽奖网站违法吗
  • 网站备案每年审吗做网站做推广