一开始我是跟着官方的文档这样写的,我就发现stPt()和endPt()方法是划线的,我也没搭理。
bikingNavigation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(destLocation == null) {
Toast.makeText(MainActivity.this, "请先选择目的地", Toast.LENGTH_SHORT).show();
return;
}
BikeNavigateHelper.getInstance().initNaviEngine(MainActivity.this, new IBEngineInitListener() {
@Override
public void engineInitSuccess() {
//初始化成功回调
LatLng startPt = new LatLng(40.047416,116.312143);
LatLng endPt = new LatLng(40.048424, 116.313513);
BikeNaviLaunchParam bParam = new BikeNaviLaunchParam().stPt(startPt).endPt(endPt);
BikeNavigateHelper.getInstance().routePlanWithRouteNode(bParam, new IBRoutePlanListener() {
@Override
public void onRoutePlanStart() {
//执行算路开始的逻辑
}
@Override
public void onRoutePlanSuccess() {
//算路成功,跳转到诱导页面
Intent intent = new Intent(MainActivity.this, BNaviGuideActivity.class);
startActivity(intent);
}
@Override
public void onRoutePlanFail(BikeRoutePlanError bikeRoutePlanError) {
Toast.makeText(MainActivity.this, "导航算路失败", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void engineInitFail() {
Toast.makeText(MainActivity.this, "骑行导航初始化失败", Toast.LENGTH_SHORT).show();
}
});
}
});
然后运行的时候,点击按钮发现会闪退,错误是这样的:
com.baidu.mapapi.bikenavi.controllers.UnsupportedBikeNaviException: BDMapSDKException: startNode or endNodeInfo cannot be null
at com.baidu.mapapi.bikenavi.BikeNavigateHelper.routePlanWithRouteNode(BikeNavigateHelper.java:145)
at com.example.baidumap.MainActivity$7$1.engineInitSuccess(MainActivity.java:323)
at com.baidu.mapapi.bikenavi.controllers.a.b.a(BikeNaviManager.java:67)
at com.baidu.platform.comapi.walknavi.c.c.handleMessage(WNaviEngineManager.java:122)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
说我地点的信息是空的,这就很纳闷了,你叫我这样写的啊。然后我机智地发现有这么两个方法:endNodeInfo()和startNodeInfo():
新的方法
就尝试着创建两个BikeRouteNodeInfo对象:
LatLng startPt = new LatLng(40.047416,116.312143);
LatLng endPt = new LatLng(40.048424, 116.313513);
BikeRouteNodeInfo startNode = new BikeRouteNodeInfo();
startNode.setLocation(startPt);
BikeRouteNodeInfo endNode = new BikeRouteNodeInfo();
endNode.setLocation(endPt);
BikeNaviLaunchParam bParam = new BikeNaviLaunchParam().startNodeInfo(startNode).endNodeInfo(endNode);
接着就运行一下,就OK了。
然后步行导航的时候,有开始闪退了,可恶啊:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.baidumap/com.example.baidumap.WNaviGuideActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.baidu.platform.comapi.walknavi.g.c.ad.<init>(UIScaleLevel.java:27)
at com.baidu.platform.comapi.walknavi.g.c.c.<init>(UIPanel.java:220)
at com.baidu.platform.comapi.walknavi.g.a.H(WalkUIController.java:882)
at com.baidu.platform.comapi.walknavi.g.a.<init>(WalkUIController.java:346)
at com.baidu.platform.comapi.walknavi.b.b(WNavigator.java:589)
at com.baidu.mapapi.walknavi.controllers.a.a.a(WalkNaviManager.java:189)
at com.baidu.mapapi.walknavi.WalkNavigateHelper.onCreate(WalkNavigateHelper.java:344)
at com.example.baidumap.WNaviGuideActivity.onCreate(WNaviGuideActivity.java:20)
at android.app.Activity.performCreate(Activity.java:7224)
at android.app.Activity.performCreate(Activity.java:7213)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
2020-05-08 02:09:49.611 723-723/? E/lowmemorykiller: Error writing /proc/28508/oom_score_adj; errno=22
我也不知道为什么骑行导航不会,步行导航会。然后网上查了一下,发现有人在百度地图的贴吧反映过这个问题。本来官方更新日志中2019.9.23的v6.0.0版本中应该修复了的步骑行的findViewById的crash问题,我用的是最新的版本,按理没问题的。后来的楼主给出的答案是:最新的SDK中,步骑行导航还不能兼容Android10,诱导页面必须继承的是Activity而不能是AppCompatActivity。
AppCompatActivity --> Activity