Android okhttp请求

下面是一个用 OkHttp 封装的 GET 请求方法,适用于 Android 项目。该方法包括基本的网络请求、错误处理,并支持通过回调返回结果。
封装 GET 请求的工具类

  1. 添加依赖
    在你的 build.gradle 文件中,确保添加了 OkHttp 的依赖:
implementation 'com.squareup.okhttp3:okhttp:4.11.0'

  1. 工具类代码
    创建一个工具类 HttpUtil,封装 GET 请求。
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class HttpUtil {

    private static final OkHttpClient client = new OkHttpClient();

    /**
     * 封装的 GET 请求方法
     * @param url 请求的 URL 地址
     * @param callback 回调接口,用于处理结果
     */
    public static void sendGetRequest(String url, HttpCallback callback) {
        // 构建请求
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();

        // 发起请求
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                // 请求失败
                if (callback != null) {
                    callback.onFailure(e);
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (callback != null) {
                    if (response.isSuccessful()) {
                        // 请求成功
                        callback.onSuccess(response.body().string());
                    } else {
                        // 请求失败(HTTP 状态码非 2xx)
                        callback.onFailure(new IOException("Unexpected code " + response.code()));
                    }
                }
            }
        });
    }

    /**
     * 回调接口,用于处理 HTTP 请求的结果
     */
    public interface HttpCallback {
        void onSuccess(String responseBody);

        void onFailure(Exception e);
    }
}

使用示例
在 Activity 或其他地方调用 sendGetRequest 方法:

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 示例 GET 请求
        String url = "https://jsonplaceholder.typicode.com/posts";

        HttpUtil.sendGetRequest(url, new HttpUtil.HttpCallback() {
            @Override
            public void onSuccess(String responseBody) {
                // 请求成功,处理响应
                Log.d(TAG, "Response: " + responseBody);
            }

            @Override
            public void onFailure(Exception e) {
                // 请求失败,处理错误
                Log.e(TAG, "Error: " + e.getMessage(), e);
            }
        });
    }
}

说明
回调接口:HttpCallback 用于处理异步请求的结果,分别有 onSuccess 和 onFailure 方法。
异步操作:OkHttp 的 enqueue 方法在后台线程中运行,因此无需担心主线程阻塞。
错误处理:在 onFailure 中返回异常信息,方便排查问题。

  1. 没有参数的 GET 请求
  2. 如果你不需要传递参数,只需发送一个简单的 GET 请求即可:
// URL 不带参数
String url = "https://jsonplaceholder.typicode.com/posts";

HttpUtil.sendGetRequest(url, new HttpUtil.HttpCallback() {
    @Override
    public void onSuccess(String responseBody) {
        // 请求成功,处理响应
        Log.d(TAG, "Response: " + responseBody);
    }

    @Override
    public void onFailure(Exception e) {
        // 请求失败,处理错误
        Log.e(TAG, "Error: " + e.getMessage(), e);
    }
});

  1. 带参数的 GET 请求
    如果你需要在 URL 中传递查询参数,可以通过 HttpUrl 或直接将参数拼接到 URL 字符串中。

方法一:手动拼接查询参数

// 带查询参数的 URL
String baseUrl = "https://jsonplaceholder.typicode.com/posts";
String userId = "1";  // 假设你要传递一个 userId 参数
String url = baseUrl + "?userId=" + userId;  // 拼接查询参数

HttpUtil.sendGetRequest(url, new HttpUtil.HttpCallback() {
    @Override
    public void onSuccess(String responseBody) {
        // 请求成功,处理响应
        Log.d(TAG, "Response: " + responseBody);
    }

    @Override
    public void onFailure(Exception e) {
        // 请求失败,处理错误
        Log.e(TAG, "Error: " + e.getMessage(), e);
    }
});

方法二:使用 HttpUrl 进行参数编码
HttpUrl 可以帮助你更安全地构建带有查询参数的 URL,自动处理参数编码:

HttpUrl url = HttpUrl.parse("https://jsonplaceholder.typicode.com/posts").newBuilder()
        .addQueryParameter("userId", "1")
        .addQueryParameter("id", "2")  // 添加多个查询参数
        .build();

HttpUtil.sendGetRequest(url.toString(), new HttpUtil.HttpCallback() {
    @Override
    public void onSuccess(String responseBody) {
        // 请求成功,处理响应
        Log.d(TAG, "Response: " + responseBody);
    }

    @Override
    public void onFailure(Exception e) {
        // 请求失败,处理错误
        Log.e(TAG, "Error: " + e.getMessage(), e);
    }
});

数据解析:
GsonFormat的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值