You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OkHttp3发送HTTP GET请求控制局域网设备触发报警

OkHttp3 发送局域网GET触发报警请求实现指导

1. 引入依赖

首先在项目中引入OkHttp3依赖,以常用场景为例:

  • Gradle(Android/Java后端项目)在Module级build.gradle的dependencies块中添加:
implementation 'com.squareup.okhttp3:okhttp:4.12.0' // 可替换为最新稳定版
  • Android项目还需要在AndroidManifest.xml中添加基础配置:
<!-- 添加网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Android 9及以上版本需要在application标签添加以下属性,允许明文HTTP请求 -->
<application
    ...
    android:usesCleartextTraffic="true"
    ...>

2. 核心请求实现代码

全局复用一个OkHttpClient实例即可,不要每次请求都新建,减少资源消耗。

异步请求(推荐,不会阻塞主线程)

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;

public class AlarmController {
    // 全局复用OkHttpClient实例
    private final OkHttpClient client = new OkHttpClient();

    public void triggerAlarm() {
        // 构造GET请求,注意地址必须加http://前缀
        Request request = new Request.Builder()
                .url("http://192.168.1.100/api/relay/1/on/")
                .build();

        // 异步发起请求,回调默认在子线程执行
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                // 请求失败处理逻辑,比如设备离线、网络不通
                e.printStackTrace();
                // Android端如需更新UI,需要自行切换到主线程执行
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (response.isSuccessful()) {
                    // 请求发送成功,设备已收到触发指令,报警会按预设规则启动后5秒自动关停
                    String respContent = response.body() != null ? response.body().string() : "";
                    // 按需处理返回结果即可
                } else {
                    // 服务端返回异常状态码,比如4xx、5xx
                    System.out.println("请求异常,状态码:" + response.code());
                }
            }
        });
    }
}

同步请求(仅适合子线程执行)

public String triggerAlarmSync() throws IOException {
    Request request = new Request.Builder()
            .url("http://192.168.1.100/api/relay/1/on/")
            .build();
    try (Response response = client.newCall(request).execute()) {
        if (!response.isSuccessful()) {
            throw new IOException("请求异常,状态码:" + response.code());
        }
        return response.body() != null ? response.body().string() : "";
    }
}

3. 注意事项

  • 运行代码的设备必须和目标报警设备处于同一局域网,且可以正常ping通192.168.1.100
  • 同步请求禁止在Android主线程执行,会触发ANR(应用无响应)异常
  • 如果请求失败优先排查网络连通性、权限配置、地址前缀是否正确三个维度

内容的提问来源于stack exchange,提问作者Hate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:06:03