上一篇
安卓如何调用第三方api
- 行业动态
- 2025-04-22
- 5
获取第三方 API 文档与凭证
查阅官方文档
访问第三方平台(如高德地图、百度AI、GitHub API)的开发者文档,了解接口功能、请求参数、返回格式及认证方式。注册并获取凭证
- 在平台官网注册账号,创建应用并获取 API Key 或 Token。
- 部分API需绑定包名或签名(如高德地图API),需在开发者后台配置。
配置 Android 项目
添加网络权限
在AndroidManifest.xml
中声明网络权限:<uses-permission android:name="android.permission.INTERNET" />
依赖库选择
- OkHttp:轻量级 HTTP 客户端。
- Retrofit:基于 OkHttp 的 RESTful API 封装库。
- Gson/Jackson:JSON 解析库。
- FastXML/Simple:XML 解析库。
示例(Retrofit + Gson):
dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' // 日志调试 }
实现网络请求
使用 Retrofit 调用 API
步骤:
- 定义 API 接口(Java/Kotlin)。
- 创建 Retrofit 实例并配置 Base URL。
- 通过接口调用方法发送请求。
示例代码:
// 定义接口 public interface ApiService { @GET("path/to/resource") Call<ResponseBody> getData(@Query("param") String param); } // 创建 Retrofit 实例 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") // 替换为实际 Base URL .addConverterFactory(GsonConverterFactory.create()) .build(); // 发起请求 ApiService apiService = retrofit.create(ApiService.class); Call<ResponseBody> call = apiService.getData("value"); call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if (response.isSuccessful()) { // 处理成功逻辑 } else { // 处理错误码(如 404、500) } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { // 处理网络错误(如超时、无网络) } });
使用 OkHttp 手动构建请求
OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor()) // 日志拦截器 .build(); Request request = new Request.Builder() .url("https://api.example.com/path?param=value") // 替换为实际 URL .addHeader("Authorization", "Bearer YOUR_TOKEN") // 如需认证 .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 处理失败 } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String responseBody = response.body().string(); // 解析 JSON/XML } else { // 处理错误码 } } });
数据解析与处理
数据类型 | 解析工具 | 示例代码 |
---|---|---|
JSON | Gson/Jackson | Gson gson = new Gson();<Br>MyObject obj = gson.fromJson(jsonString, MyObject.class); |
XML | DOM/SAX 或第三方库(如 Simple) | DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();<Br>Document doc = builder.parse(inputStream); |
权限与网络安全
动态权限申请
Android 6.0+ 需动态申请敏感权限(如定位、存储):if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE); }
HTTPS 配置
若 API 使用自签名证书,需在res/xml/network_security_config.xml
中配置:<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">api.example.com</domain> </domain-config>
并在
AndroidManifest.xml
中引用:<application ...> <network-security-config srcCompat="@xml/network_security_config" /> </application>
错误处理与优化
常见错误类型
- 网络超时:设置 OkHttp 超时时间。
- 数据格式错误:捕获 JSON/XML 解析异常。
- 认证失败:检查 API Key/Token 有效性。
日志与调试
- 使用
LoggingInterceptor
打印 HTTP 日志。 - 在
onFailure
中记录异常详情。
- 使用
相关问题与解答
问题1:如何测试第三方 API 是否可用?
解答:
- 使用工具(如 Postman、cURL)直接发送请求,验证接口响应。
- 检查网络连接、URL 拼写、参数格式是否正确。
- 确认 API Key/Token 是否已生效且未过期。
问题2:如何处理跨域问题(CORS)?
解答:
- 客户端无需处理:CORS 是浏览器限制,Android 使用
HttpURLConnection
或 OkHttp 时不受此限制。 - 服务器端配置:若 API 返回跨域错误,需在服务器端设置
Access-Control-Allow-Origin