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
相关产品推荐
相关产品推荐

