Android OkHttp发送请求

在Android开发中,我们经常需要与服务器进行数据交互。而发送网络请求是其中一项重要的操作。OkHttp是一个开源的网络请求库,它提供了简洁的API,使得Android应用可以轻松地发送网络请求并处理响应。

本文将介绍如何使用OkHttp库在Android应用中发送网络请求,并通过代码示例来说明其使用方法。

OkHttp简介

OkHttp是一个高效、可靠的HTTP客户端库,由Square公司开发。它基于Java的Okio库构建,并提供了简洁的API接口,方便开发者进行网络请求的发送和响应的处理。

OkHttp的特点包括以下几个方面:

  1. 支持HTTP/2和WebSocket:OkHttp能够利用HTTP/2和WebSocket协议提供更高效的网络传输。
  2. 自动处理连接池和请求重试:OkHttp能够自动管理连接池,并在必要时进行请求重试,提高网络请求的稳定性。
  3. 支持同步和异步请求:OkHttp提供了同步和异步的方式发送网络请求,方便开发者根据需求选择合适的方式。
  4. 支持自定义拦截器:OkHttp允许开发者定义拦截器来自定义网络请求的处理过程,例如添加公共参数、请求头等。
  5. 支持HTTP缓存:OkHttp支持HTTP缓存,可以提高应用的响应速度和降低流量消耗。

添加OkHttp库依赖

在使用OkHttp之前,需要在项目的build.gradle文件中添加OkHttp库的依赖。

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
}

发送GET请求示例

下面是一个使用OkHttp发送GET请求的示例代码:

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {
    private OkHttpClient client = new OkHttpClient();

    private void sendRequest(String url) {
        Request request = new Request.Builder()
                .url(url)
                .build();

        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                // 处理请求失败的逻辑
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                // 处理请求成功的逻辑
                String responseData = response.body().string();
                // 解析响应数据并进行处理
            }
        });
    }
}

在上述代码中,首先创建了一个OkHttpClient实例,并通过其发送请求的方法newCall()创建了一个Call对象。然后使用Call对象的enqueue()方法发送异步请求,传入一个Callback对象用于处理响应结果。

在Callback的onFailure()方法中处理请求失败的情况,在onResponse()方法中处理请求成功的情况。在onResponse()方法中,可以通过response.body().string()获取到响应数据,并进行后续的处理。

发送POST请求示例

下面是一个使用OkHttp发送POST请求的示例代码:

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {
    private OkHttpClient client = new OkHttpClient();

    private void sendRequest(String url, String jsonData) {
        RequestBody requestBody = new FormBody.Builder()
                .add("data", jsonData)
                .build();

        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();

        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                // 处理请求失败的逻辑
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                // 处理请求成功的逻辑
                String responseData = response.body().string();
                // 解析响应数据并进行处理
            }
        });
    }
}

在上述代码中,首先创建了一个RequestBody对象,用于构建POST请求的请求体。然后创建了一个Request对象,并使用post()方法设置请求方式为POST,并传入请求体。其他部分的代码与发送GET请求的示例相同。

使用自定义拦截器示例