我是编程的初学者,并不了解很多。我使用谷歌路线图API来获取两个标记之间的距离。显然,它是在后台线程上执行的。我无法使用可运行的程序在ui上显示接收到的距离,但无法将距离保存到全局变量中以用于其他计算。
这是我的代码的样子:
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);
}
});
}
}
}
}
不幸的是,在此方法之外,我的距离arraylist仍然为null。在我尝试将距离结果添加到数组列表的同一空间内,我无法在视图或Toast上显示结果。另外,当我将结果添加到我的arraylist时,如果我在此方法中检查arraylist的大小,则表明结果已添加。但是,如果我在此方法之外访问我的arraylist,则为null。但是我需要能够收集距离列表(注意,从for循环调用此方法)并将每个收集的距离添加到我的距离数组列表中,并在该方法之外执行计算以获得总距离。请帮我找到一种方法。并且,请您像该领域的初学者一样,为您提供尽可能简单或技术性的解释。
[如果您使用的是android,则可以查看Android注释。您可以通过简单地将其声明为@Background来创建背景方法,然后使用@UiThread批注在主线程中添加内容。
https://developer.android.com/studio/write/annotations
这是一个非常强大的学习工具。您只需要几个依赖项
因此事实证明,这确实不是问题。值已保存。在调用calculateDirections方法之后,我只是太早检查了数组列表的大小]
所以在calculateDistance()之后;我举杯去检查arraylist的大小。其0