gpt4 book ai didi

java - 如何将数据从后台线程移动到ui线程

转载 作者:行者123 更新时间:2023-12-01 18:36:06 24 4
gpt4 key购买 nike

我是编程初学者,了解不多。我使用谷歌方向 API 来获取两个标记之间的距离。显然,它是在后台线程上执行此操作的。我能够使用可运行程序在我的用户界面上显示接收到的距离,但我无法将距离保存在全局变量中以用于其他计算。

这就是我的代码的样子:

public class MyClass {

private List<Distance> distances = new ArrayList<>();

private void calculateDistance (LatLng origin, LatLng destination) {
DirectionsApiRequest directions = new DirectionsApiRequest(mGeoApiContext);

directions.origin(origin);
directions.destination(destination).setCallback(new PendingResult.Callback<DirectionsResult>() {
@Override
public void onResult(DirectionsResult result) {
Distance distance = result.routes[0].legs[0].distance;
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
//adding the distance result from this method to the distances arraylist above
distances.add(distance);
}
});
}
}

}

}

不幸的是,我的距离数组列表在此方法之外仍然为空。在我尝试将距离结果添加到数组列表的同一空间内,我能够在 View 或 Toast 上显示结果。另外,当我将结果添加到数组列表中时,如果我检查此方法中数组列表的大小,它会显示结果已添加。但是如果我在这个方法之外访问我的数组列表,它就是空的。但我需要能够收集距离列表(注意。此方法是从 for 循环调用的)并将每个收集到的距离添加到我的距离数组列表中,并在方法之外执行计算以获得总距离。请帮我想个办法。并且请让您的解释尽可能简单或技术性较低,因为我是该领域的初学者。

最佳答案

如果您正在使用 Android,您可以查看 Android Annotations。您可以通过简单地将后台方法声明为 @Background 来创建后台方法,然后使用 @UiThread 注释将内容放在主线程上。

https://developer.android.com/studio/write/annotations

这是一个非常强大的学习工具。您所需要的只是几个依赖项

关于java - 如何将数据从后台线程移动到ui线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60040621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com