BNRoutePlanInfos routePlaneInfos = BaiduNaviManagerFactory.getRoutePlanManager() .getRoutePlanInfo(); 这段代码有可能为空
时间: 2023-11-28 15:49:48 浏览: 24
是的,这段代码可能返回空值。如果当前没有进行路径规划,或者路径规划失败,该方法将返回空值。在使用该方法的时候,需要进行非空判断,以避免空指针异常的发生。例如可以这样写:
```
BNRoutePlanInfos routePlanInfos = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo();
if (routePlanInfos != null) {
// do something
}
```
相关问题
BNRoutePlanInfos routePlaneInfos = BaiduNaviManagerFactory.getRoutePlanManager() .getRoutePlanInfo(); 这段代码为空应该怎么写
如果该段代码返回的是空值,你可以在获取 `BNRoutePlanInfos` 对象之前先进行路线规划操作。例如:
```
// 创建起点和终点
BNaviPoint startPoint = new BNaviPoint(startLng, startLat, "起点", BNaviPoint.CoordinateType.BD09LL);
BNaviPoint endPoint = new BNaviPoint(endLng, endLat, "终点", BNaviPoint.CoordinateType.BD09LL);
// 创建路线规划参数
BaiduNaviManagerFactory.getRoutePlanManager().setObserver(new RoutePlanManager.RoutePlanObserver() {
@Override
public void onRoutePlanStart() {
// 路线规划开始
}
@Override
public void onRoutePlanSuccess() {
// 路线规划成功,可以获取路线规划信息了
BNRoutePlanInfos routePlanInfos = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo();
// ...
}
@Override
public void onRoutePlanFail(BaiduNaviManager.RoutePlanFailCode routePlanFailCode) {
// 路线规划失败
}
@Override
public void onRoutePlanCanceled() {
// 路线规划取消
}
});
// 进行路线规划
BaiduNaviManagerFactory.getRoutePlanManager().routePlanToNavi(startPoint, endPoint, null, BaiduNaviManager.RoutePlanPreference.ROUTE_PLAN_MOD_RECOMMEND, false, null);
```
在上述代码中,我们先创建了起点和终点,然后通过 `setObserver()` 方法设置了路线规划回调监听器,最后调用 `routePlanToNavi()` 方法进行路线规划。当路线规划成功后,我们就可以通过 `getRoutePlanInfo()` 方法获取路线规划信息了。
在handler中调用BNRoutePlanInfos routePlaneInfo = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo(); 但是这个数据是在子线程中写的
是的,BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo() 方法是在子线程中获取路线规划信息的。因此,如果您在主线程中调用这个方法,它会阻塞主线程,导致 UI 假死和 ANR。所以,您需要使用异步方式获取路线规划信息,例如使用 Handler 或 AsyncTask 等。
以下是在 Handler 中获取路线规划信息的示例代码:
```java
private static final int MSG_GET_ROUTE_PLAN_INFO = 1;
private Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_GET_ROUTE_PLAN_INFO:
BNRoutePlanInfos routePlanInfo = BaiduNaviManagerFactory.getRoutePlanManager().getRoutePlanInfo();
// do something with routePlanInfo
break;
default:
break;
}
}
};
private void getRoutePlanInfoAsync() {
new Thread(new Runnable() {
@Override
public void run() {
// do some heavy work here, such as route planning
// ...
// send message to handler to get route plan info
mHandler.sendEmptyMessage(MSG_GET_ROUTE_PLAN_INFO);
}
}).start();
}
```
在上面的代码中,我们使用了一个 Handler 来处理获取路线规划信息的消息。在子线程中执行耗时的路线规划操作后,我们向 Handler 发送一个空消息,告诉它现在可以获取路线规划信息了。然后,Handler 就会在主线程中执行 handleMessage 方法,并从导航管理器中获取路线规划信息。这样就可以避免在主线程中阻塞 UI。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)