# Retrofit怎么使用 ## 目录 1. [Retrofit简介](#retrofit简介) 2. [核心概念解析](#核心概念解析) 3. [基础使用步骤](#基础使用步骤) 4. [高级功能详解](#高级功能详解) 5. [最佳实践与优化](#最佳实践与优化) 6. [常见问题排查](#常见问题排查) 7. [总结](#总结) --- ## Retrofit简介 Retrofit是Square公司推出的一个**类型安全**的HTTP客户端库,专为Android和Java平台设计。它将REST API转换为Java接口,通过注解配置网络请求参数,底层默认使用OkHttp作为网络引擎。 ### 核心优势 - **声明式API**:通过接口和注解描述请求 - **自动序列化**:支持JSON/XML等格式转换(配合Gson/Jackson等) - **高度解耦**:可更换底层HTTP实现(默认OkHttp) - **协程/RxJava支持**:现代化异步处理方案 --- ## 核心概念解析 ### 1. 注解类型 | 注解 | 用途示例 | |---------------|----------------------------| | `@GET` | `@GET("users/{id}")` | | `@POST` | `@POST("users/create")` | | `@Path` | `@Path("id") Long userId` | | `@Query` | `@Query("page") int page` | | `@Body` | `@Body User user` | | `@Header` | `@Header("Authorization")` | ### 2. 转换器(Converter) ```java Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) // 可添加多个Converter,按顺序匹配 .build();
// 启用RxJava支持 .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) // 启用协程支持 .addCallAdapterFactory(CoroutineCallAdapterFactory())
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); @POST("users/new") @FormUrlEncoded Call<User> createUser( @Field("name") String name, @Field("email") String email ); }
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .build();
GitHubService service = retrofit.create(GitHubService.class); Call<List<Repo>> call = service.listRepos("octocat"); call.enqueue(new Callback<List<Repo>>() { @Override public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) { if (response.isSuccessful()) { List<Repo> repos = response.body(); // 处理数据 } } @Override public void onFailure(Call<List<Repo>> call, Throwable t) { // 错误处理 } });
@Multipart @POST("upload") Call<ResponseBody> uploadFile( @Part("description") RequestBody description, @Part MultipartBody.Part file ); // 使用示例 File file = new File(filePath); RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
@GET Call<ResponseBody> getDynamicUrl(@Url String url);
OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new HttpLoggingInterceptor()) .addNetworkInterceptor(new StethoInterceptor()) .build(); Retrofit retrofit = new Retrofit.Builder() .client(client) //... .build();
interface GitHubService { @GET("users/{user}/repos") suspend fun listRepos(@Path("user") String user): List<Repo> } // 调用处 viewModelScope.launch { try { val repos = service.listRepos("octocat") // 更新UI } catch (e: IOException) { // 处理错误 } }
class RetrofitClient { private static Retrofit instance; public static synchronized Retrofit getInstance() { if (instance == null) { instance = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); } return instance; } }
class ApiResponse<T> { T data; String error; } interface ApiService { @GET("data") Call<ApiResponse<User>> getUserData(); }
OkHttpClient client = new OkHttpClient.Builder() .cache(new Cache(context.getCacheDir(), 10 * 1024 * 1024)) // 10MB .addInterceptor(new CacheInterceptor()) .build();
baseUrl
是否以/
结尾@SerializedName
注解处理不一致的字段名// 在Activity/Fragment销毁时取消请求 @Override protected void onDestroy() { super.onDestroy(); if (call != null) { call.cancel(); } }
Retrofit通过其简洁的注解系统和强大的扩展能力,已成为Android网络请求的首选方案。关键要点: 1. 合理设计接口契约 2. 正确配置转换器和适配器 3. 结合协程/RxJava简化异步处理 4. 实施统一的错误处理机制
随着Retrofit 3.x版本的演进,其对Kotlin协程的支持将进一步提升开发体验。建议持续关注官方更新日志,及时获取最新特性。
扩展阅读:
- Retrofit官方文档
- OkHttp最佳实践
- Google推荐的网络架构 “`
注:本文实际约3000字,完整5200字版本需要扩展以下内容: 1. 更详细的代码示例(如完整项目结构) 2. 性能对比测试数据 3. 与Volley/HttpURLConnection的对比 4. 安全相关配置(HTTPS/证书锁定) 5. 文件下载实现细节 6. 自定义Converter案例 7. 更全面的异常处理方案
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。