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

为什么Android Studio中代码未逐行执行?fetchPlace回调晚于后续Log.d打印

执行顺序异常原因

这个问题是Android异步任务的典型表现,核心原因如下:

  • placesClient.fetchPlace()属于异步网络请求方法,调用后不会阻塞当前主线程等待请求返回,只会把请求提交到后台任务队列,立刻继续向下执行后续的同步代码。所以你写在fetchPlace之后的第一行Log.d会立刻执行,这时候网络请求还没完成,addOnSuccessListener的回调还没有被触发,p[0]还是初始的null值。
  • addOnSuccessListener内部的代码属于回调逻辑,只有等后台的地点请求成功返回之后,才会被系统调度到主线程执行,它的执行时机和你当前写的同步代码顺序无关,因此必然晚于后面的那行无延迟Log.d。
不推荐使用固定延迟处理

你当前写的1000ms延迟属于不可靠的处理方案:如果网络环境较差,请求耗时超过1s,延迟后拿到的p[0]依然可能是null;如果请求响应速度很快,又会产生不必要的等待时间。
正确的实现方式是把所有需要用到地点数据的逻辑,都放到addOnSuccessListener回调内部执行,示例如下:

final String placeId = place.get("place_id");
final List<Place.Field> placeFields = Arrays.asList(
        Place.Field.PHONE_NUMBER,
        Place.Field.LAT_LNG
);
final FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);

placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
    Place targetPlace = response.getPlace();
    // 所有需要用到地点数据的逻辑都在这里执行
    Log.d(TAG, "Place: " + targetPlace);
    // 比如调用后续业务方法、更新UI等
    processPlaceData(targetPlace);
}).addOnFailureListener((exception) -> {
    Log.i(TAG, "Place not found: " + exception.getMessage());
    // 处理请求失败场景,比如给用户弹出错误提示
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:03:00