java,import java.io.BufferedReader;,import java.io.InputStreamReader;,import java.net.HttpURLConnection;,import java.net.URL;public class NetworkRequestDemo {, public static void main(String[] args) {, try {, URL url = new URL("http://example.com/api");, HttpURLConnection connection = (HttpURLConnection) url.openConnection();, connection.setRequestMethod("GET"); int responseCode = connection.getResponseCode();, if (responseCode == HttpURLConnection.HTTP_OK) {, BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));, String line;, StringBuilder response = new StringBuilder();, while ((line = reader.readLine()) != null) {, response.append(line);, }, reader.close();, System.out.println("Response: " + response.toString());, } else {, System.out.println("GET request failed");, }, } catch (Exception e) {, e.printStackTrace();, }, },},
“
在Android开发中,网络请求是常见的操作之一,以下是一个简单的基于Retrofit和OkHttp的Android网络请求Demo,包括项目结构、关键代码以及常见问题解答。
1、app:主应用模块,包含Java代码和资源文件。
2、build.gradle:构建配置文件,用于配置项目依赖和构建选项。
3、proguard-rules.pro:代码混淆规则文件,用于保护代码安全。
4、src/main/java/com/example/networkdemo:主要Java代码目录。
5、src/main/res:资源文件目录,包括布局、图片等。
6、src/androidTest/java/com/example/networkdemo:测试代码目录。
7、src/test/java/com/example/networkdemo:单元测试代码目录。
1、添加依赖
在build.gradle
文件中添加Retrofit和Gson的依赖:
dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' }
2、创建接口定义
定义一个接口来描述API请求,使用Retrofit注解来指定HTTP方法、URL和请求参数。
public interface ApiService { @GET("api/data") Call<List<DataItem>> getData(); }
3、创建Retrofit实例
在应用启动时或需要发起请求的地方创建Retrofit实例,并配置OkHttpClient和其他设置。
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .client(new OkHttpClient.Builder().build()) .build();
4、发起网络请求
通过Retrofit实例获取接口实现,并调用接口方法发起网络请求。
ApiService apiService = retrofit.create(ApiService.class); Call<List<DataItem>> call = apiService.getData(); call.enqueue(new Callback<List<DataItem>>() { @Override public void onResponse(Call<List<DataItem>> call, Response<List<DataItem>> response) { if (response.isSuccessful()) { List<DataItem> dataItems = response.body(); // 处理成功响应的数据 } else { // 处理失败响应 } } @Override public void onFailure(Call<List<DataItem>> call, Throwable t) { // 处理请求失败的情况 } });
1、问题:如何在网络请求中使用POST方法?
解答:在接口定义中使用@POST
注解,并通过@Body
注解指定请求体。
@POST("api/submit") Call<ResponseBody> submitData(@Body RequestBody requestBody);
在发起请求时,将请求体作为参数传递:
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); Call<ResponseBody> call = apiService.submitData(requestBody);
2、问题:如何处理网络请求的异步回调?
解答:Retrofit默认使用异步回调方式,通过实现Callback
接口的onResponse
和onFailure
方法来处理响应成功和失败的情况,在onResponse
方法中,可以获取到成功的响应数据;在onFailure
方法中,可以获取到失败的错误信息,如果需要在主线程中更新UI,可以使用runOnUiThread
方法或其他线程切换机制。