如何使用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
相关产品推荐
相关产品推荐

