BNRoutePlanInfos routePlaneInfo = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo(); 这个代码要在子线程中写,因为是个耗时操作,之前在主线程写了 ArrayList<String> limitInfo = routePlaneInfo.getLimitInfo(); 造成了空指针异常, 现在开启了Thread,在子线程中获取数据信息,还会出现空指针吗?
时间: 2024-02-05 19:14:07 浏览: 60
QT中利用TCP协议实现了一个多线程的文件互传系统
5星 · 资源好评率100%
在子线程中执行耗时操作是一个很好的做法,因为它可以避免在主线程中阻塞UI。但是即使在子线程中执行,仍然可能出现空指针异常。这是因为有些操作可能需要在主线程完成,否则可能会因为界面相关的操作而抛出异常。
在你提供的代码中,获取`routePlaneInfo`的操作不一定需要在主线程中完成,但是调用`getLimitInfo()`方法可能会需要在主线程中完成。所以建议你在子线程中异步调用`getLimitInfo()`方法,并在主线程中通过`runOnUiThread()`方法更新UI。
具体示例代码如下:
```
new Thread(new Runnable() {
@Override
public void run() {
BNRoutePlanInfos routePlaneInfo = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo();
final ArrayList<String> limitInfo = routePlaneInfo.getLimitInfo();
runOnUiThread(new Runnable() {
@Override
public void run() {
// 在主线程中更新UI
// 使用limitInfo对象更新UI
}
});
}
}).start();
```
阅读全文