在安卓应用中调用网站后台接口(API),通常涉及网络请求、数据解析和UI更新,以下是实现流程的关键步骤:
在 AndroidManifest.xml
中声明网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
推荐使用 Retrofit(结合 Gson 或 Moshi 解析 JSON),因其简洁高效且社区支持广泛。
在 build.gradle
中添加 Retrofit 和 Gson 依赖:
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
创建一个 Java 接口,声明与后台 API 对应的请求方法:
public interface ApiService { @GET("users/{id}") // 替换为实际接口路径 Call<User> getUser(@Path("id") int userId); }
配置 Base URL 和数据解析器:
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/api/") // 替换为后台 API 基础路径 .addConverterFactory(GsonConverterFactory.create()) // 支持 JSON 解析 .build(); ApiService apiService = retrofit.create(ApiService.class);
// 异步请求(推荐) apiService.getUser(123).enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful()) { User user = response.body(); // 更新 UI 或处理数据 } else { // 处理错误(如 4xx/5xx) } } @Override public void onFailure(Call<User> call, Throwable t) { // 处理网络错误(如无网络、超时) } });
库名 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
OkHttp | 需要手动管理请求和响应 | 轻量、性能高、支持 HTTP/2 | 需手写大量模板代码 |
Retrofit | RESTful API 调用 | 接口化、支持多种数据格式、扩展性强 | 学习成本稍高 |
Volley | 简单请求、图片加载 | 内置缓存、适合小规模请求 | 不支持复杂场景(如文件上传) |
AndroidManifest.xml
是否添加 <uses-permission android:name="android.permission.INTERNET" />
。OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .build(); Retrofit retrofit = Retrofit.Builder() .client(client) .baseUrl("https://example.com/api/") .build();
public class User { private int id; private String name; // Getter 和 Setter 方法 }
解答:
在 Retrofit 中,可以通过 @Headers
或动态添加请求头:
// 方式1:静态请求头 @Headers("Content-Type: application/json") @POST("users/login") Call<LoginResponse> login(@Body LoginRequest request); // 方式2:动态请求头 Map<String, String> headers = new HashMap<>(); headers.put("Authorization", "Bearer token"); Call<LoginResponse> call = apiService.login(request, headers);
解答:
可以使用 Retrofit
的 executeCalls
或结合 Kotlin Coroutines
:
ExecutorService
管理线程池。val response = apiService.getUser(123).awaitResponse() // 自定义扩展函数