Android网络编程API详解与疑问解答 的疑问文章标题。
- 行业动态
- 2025-03-02
- 1
HttpURLConnection
、 HttpClient
(如OkHttp)、 Socket
等,用于实现HTTP请求、文件传输等功能。
Android 网络编程 API
1、HttpURLConnection:
创建 URL 对象:URL url = new URL("http://www.example.com/api/data");
打开连接并设置请求方法:HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET");
设置请求头(可选):connection.setRequestProperty("Content-Type", "application/json");
发送请求并接收响应:connection.connect(); InputStream inputStream = connection.getInputStream();
处理响应:使用BufferedReader
读取输入流中的数据,并进行相应的处理。
关闭连接:inputStream.close();
2、OkHttp:
创建 OkHttpClient 实例:OkHttpClient client = new OkHttpClient();
构建 Request 对象:Request request = new Request.Builder().url("https://api.github.com/repos/square/okhttp/issues").header("User-Agent", "OkHttp Headers.java").addHeader("Accept", "application/json; q=0.5").addHeader("Accept", "application/vnd.github.v3+json").build();
发送请求并处理响应(同步):Response response = client.newCall(request).execute();
发送请求并处理响应(异步):client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) {} @Override public void onResponse(Response response) throws IOException {} });
3、Retrofit:
定义 API 接口:interface GitHubService { @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> repoContributors(@Path("owner") String owner, @Path("repo") String repo); }
创建 Retrofit 实例并配置:Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com/").addConverterFactory(GsonConverterFactory.create()).build();
获取 API 服务:GitHubService gitHubService = retrofit.create(GitHubService.class);
发送请求并处理响应:Call<List<Contributor>> call = gitHubService.repoContributors("square", "retrofit"); Response<List<Contributor>> response = call.execute();
相关示例代码
以下是一个简单的使用 Retrofit 进行网络请求的示例代码:
// 添加依赖库 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 定义 API 接口 interface GitHubService { @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> repoContributors(@Path("owner") String owner, @Path("repo") String repo); } // 创建 Retrofit 实例并配置 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); // 获取 API 服务 GitHubService gitHubService = retrofit.create(GitHubService.class); // 发送请求并处理响应 Call<List<Contributor>> call = gitHubService.repoContributors("square", "retrofit"); call.enqueue(new Callback<List<Contributor>>() { @Override public void onResponse(Call<List<Contributor>> call, Response<List<Contributor>> response) { if (response.isSuccessful()) { List<Contributor> contributors = response.body(); for (Contributor contributor : contributors) { System.out.println(contributor.login); } } else { System.out.println("请求失败:" + response.message()); } } @Override public void onFailure(Call<List<Contributor>> call, Throwable t) { t.printStackTrace(); } });
相关问题与解答
1、问题:在 Android 中使用 Retrofit 进行网络请求时,如何设置请求头?
解答:在 Retrofit 中设置请求头可以通过在Retrofit.Builder()
中调用.client()
方法,并传入自定义的OkHttpClient
来实现。
OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request original = chain.request(); Request request = original.newBuilder() .header("User-Agent", "Retrofit User-Agent") .method(original.method(), original.body()) .build(); return chain.proceed(request); } }) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .client(client) .addConverterFactory(GsonConverterFactory.create()) .build();
2、问题:如何在 Android 中处理网络请求的异常情况?
解答:在 Android 中处理网络请求的异常情况通常包括检查网络状态、处理 HTTP 错误以及捕获其他可能的异常,在使用 Retrofit 时,可以在回调方法onFailure()
中处理异常情况:
call.enqueue(new Callback<List<Contributor>>() { @Override public void onResponse(Call<List<Contributor>> call, Response<List<Contributor>> response) { if (!response.isSuccessful()) { // 处理 HTTP 错误 System.out.println("HTTP Error: " + response.code()); } else { List<Contributor> contributors = response.body(); for (Contributor contributor : contributors) { System.out.println(contributor.login); } } } @Override public void onFailure(Call<List<Contributor>> call, Throwable t) { // 处理其他异常情况 t.printStackTrace(); } });