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

Android Studio中new Thread未执行,GET请求无响应求助

问题解决:Android中Thread未执行+GET请求失败排查

问题描述

在Android Studio中尝试通过GET请求访问指定URL,代码中创建了Thread但无法在Logcat中看到Log.w("sss","gushen")的输出,请求也未成功连接目标地址。核心代码如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    data=findViewById(R.id.bright);

    if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
        requestPermissions(new String[]{"android.permission.INTERNET"},1);
        Gushen();
    }
}
public void Gushen(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                OkHttpClient client = new OkHttpClient();
                Log.w("sss","gushen");
                Request request = new Request.Builder().url("http://iot-api.heclouds.com/thingmodel/query-thing-model?product_id=w50WLDzGBb").build();
                Response response = client.newCall(request).execute();
                String responseData = response.body().string();
                Log.w("sss",responseData);
                parseJSONWithGSON(responseData);

                JsonRootBean app = new Gson().fromJson(responseData, JsonRootBean.class);
                List<Datastreams> streams = app.getData().getDatastreams();
                List<Datapoints> points = streams.get(0).getDatapoints();
                value = points.get(0).getValue();
                data.post(new Runnable() {
                    @Override
                    public void run() {
                        data.setText(String.format("Light is:%s", value));
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();}
        }
    });
}

解决方案

1. 启动线程(核心问题)

你创建了Thread对象但没有调用start()方法,线程根本不会执行。修改Gushen()方法:

public void Gushen(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            // 原有逻辑保持不变
        }
    }).start(); // 添加这行启动线程
}

这是你看不到日志的直接原因,线程未启动,内部代码完全不会执行。

2. 修正权限申请逻辑

当前代码在发起权限请求后直接调用Gushen(),但权限申请是异步流程,用户还未完成授权就发起了网络请求。需要在权限回调中处理:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Gushen(); // 授权成功后再执行网络请求
        } else {
            Log.w("sss", "网络权限被拒绝,无法发起请求");
        }
    }
}

同时确保在AndroidManifest.xml中声明权限:

<uses-permission android:name="android.permission.INTERNET" />

3. 完善日志与错误排查

  • 在异常捕获块中添加日志,打印完整异常信息:
catch (IOException e) {
    Log.e("sss", "请求执行失败", e); // 打印异常栈,定位具体问题
}
  • 打印请求URL和响应码,确认请求状态:
// 请求前打印URL
Log.w("sss", "请求地址: http://iot-api.heclouds.com/thingmodel/query-thing-model?product_id=w50WLDzGBb");

// 获取响应后打印状态码
Response response = client.newCall(request).execute();
Log.w("sss", "响应状态码: " + response.code());
if (response.isSuccessful()) {
    String responseData = response.body().string();
    Log.w("sss", "响应数据: " + responseData);
    // 后续JSON解析逻辑
} else {
    Log.w("sss", "请求失败,状态码: " + response.code());
}
  • 确认OkHttpClient依赖已正确添加到build.gradle(Module级别):
implementation 'com.squareup.okhttp3:okhttp:4.12.0' // 使用最新稳定版本

4. 验证请求成功状态

通过response.isSuccessful()判断请求是否成功(状态码200-299为成功),同时打印响应码和响应数据,确认是否正确获取到目标内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:16:00