📜  Android 网络连接服务(1)

📅  最后修改于: 2023-12-03 14:39:10.576000             🧑  作者: Mango

Android 网络连接服务

在 Android 开发中,网络连接通常是必须的,因为很多应用程序需要从远端服务器获取数据、将数据上传到服务器或与其他设备进行通信。Android 提供了一些类来管理网络连接。

HTTP 请求

在 Android 开发中,最常见的网络连接是 HTTP 请求。Android 提供了一个类来处理 HTTP 请求: HttpURLConnection

建立 HTTP 连接

建立 HTTP 连接可以通过 HttpURLConnection 类来实现。下面是一个建立 HTTP 连接并发送 GET 请求的例子:

URL url = new URL("http://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();

上述代码中,我们首先创建一个 URL 对象,然后通过这个 URL 对象获取一个 HttpURLConnection 对象。接下来,我们可以设置请求方法和其他请求属性,并调用 connect() 方法来建立连接。

发送请求和读取响应

我们可以使用 OutputStream 将请求发送到服务器:

OutputStream os = conn.getOutputStream();
os.write("data".getBytes());
os.flush();
os.close();

然后,我们可以使用 getInputStream() 方法读取服务器的响应内容:

InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
reader.close();
关闭连接

最后,我们需要关闭连接:

conn.disconnect();
使用 Volley 进行 HTTP 请求

Volley 是一种能够更轻松地进行 HTTP 请求的第三方库。它具有以下特点:

  • 自动解析网络响应为 UTF-8 格式文本或二进制
  • 自动缓存网络请求
  • 具有请求队列和优先级控制
  • 支持取消请求
  • 可以提供自定义请求和响应处理逻辑
引入 Volley

使用 Volley 首先需要在项目中添加以下依赖:

dependencies {
    implementation 'com.android.volley:volley:1.2.1'
}
发送请求

使用 Volley 发送请求需要先创建一个请求队列:

RequestQueue queue = Volley.newRequestQueue(context);

然后,我们可以使用 StringRequestJsonObjectRequestJsonArrayRequest 等类来创建请求,例如以下代码创建了一个 GET 请求:

String url = "http://example.com";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                System.out.println(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                System.out.println(error.getMessage());
            }
        });
queue.add(stringRequest);

上述代码中,我们创建了一个 StringRequest 对象,并把它加入请求队列中。我们还需要在请求完成之后处理响应的结果,这里使用了 Response.ListenerResponse.ErrorListener 两个接口来分别处理成功和失败的情况。

使用 Retrofit 进行 HTTP 请求

Retrofit 是一个基于注解的 RESTful 客户端库,它可以将 HTTP API 转换为 Java 接口,从而可以更轻松地进行 HTTP 请求。

引入 Retrofit

使用 Retrofit 需要在项目中添加以下依赖:

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}
创建 API 接口

使用 Retrofit 首先需要创建一个 API 接口:

public interface MyApi {
    @GET("users/{id}")
    Call<User> getUser(@Path("id") int userId);
}

上述代码中,我们创建了一个 MyApi 接口,其中声明了一个 getUser() 方法,用于获取指定 ID 的用户信息。

创建 Retrofit 对象

接下来,我们可以使用 Retrofit 类创建一个 Retrofit 对象:

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://example.com/api/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

上述代码中,我们设置了 API 的基础 URL 和使用 Gson 解析响应结果。

发送请求

接下来,我们可以使用 create() 方法创建一个 MyApi 对象,并调用接口方法发送请求:

MyApi api = retrofit.create(MyApi.class);
Call<User> call = api.getUser(123);
call.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        User user = response.body();
        System.out.println(user.getName());
    }

    @Override
    public void onFailure(Call<User> call, Throwable t) {
        t.printStackTrace();
    }
});

上述代码中,我们创建了一个 Call 对象,并使用 enqueue() 方法提交请求。我们还需要为请求结果设置回调,这里使用了 Callback 接口。

总结

Android 提供了多种方式进行网络连接,我们可以使用原生的 HttpURLConnection 类、第三方库 Volley 或 Retrofit 进行 HTTP 请求。在实际开发中,我们需要根据需要选择适合的方法进行网络连接。