【问题标题】:Native map not shown in LayeredLayout on Android device with Codename One本机地图未在代号为 One 的 Android 设备上的分层布局中显示
【发布时间】:2017-02-20 22:04:14
【问题描述】:

2-3 周以来,我一直在真正的 Android 设备上使用我的应用程序进行开发。到目前为止,它始终在设备上显示谷歌地图,在模拟器上显示 OSM。

今天我做了一些更改——即在地图顶部添加了一个按钮,并发送了构建。 CN1 和 CN1libs 在发送构建之前更新。现在,当我在设备上对其进行测试时,没有显示任何地图并且我得到 404: Not found。如果您询问模拟器中的行为,它仍然可以按预期工作(但它使用 OSM 和 MapComponent)。

这是我放下地图的代码(地图初始化没有改变):

Container mapWithButton = LayeredLayout.encloseIn(BorderLayout.centerCenter(googleMap),
FlowLayout.encloseRight(locateMeButton));
this.add(BorderLayout.CENTER, mapWithButton);

我查看了MapContainer history,但最近的更改仅涉及longPressListener。请注意,本机地图应用在设备上运行良好。通过 DDMS 进行调试没有帮助(屏幕上出现相同的错误)。

我是否忘记更新或添加构建提示?

任何帮助表示赞赏。

【问题讨论】:

  • 这可能与您使用的证书的权限或更改有关,本地 Google 地图绑定到特定证书和权限,并且 Google 云设置或应用程序中的某些内容可能已更改导致此问题失败。调试的方法是用电缆插入设备并查看应该列出的 ddms/logcat 输出
  • 不做任何改变,如果我做this.add(BorderLayout.CENTER, googleMap); (而不是使用LayeredLayout)然后地图会再次显示。

标签: java android google-maps codenameone


【解决方案1】:

最终,404 错误与地图无关,而是与添加的 MapListener 相关,它试图从移动地图时尚不可用的地址获取数据。

然而,要使地图真正出现,需要通过BorderLayout.center() 而不是BorderLayout.centerCenter() 替代。

所以我没有提供任何解释,但以下代码按预期显示地图和按钮(注意 BorderLayout.center 而不是 BorderLayout.centerCenter

Container mapWithButton = LayeredLayout.encloseIn(
                                        BorderLayout.center(googleMap),
                                        FlowLayout.encloseRight(locateMeButton));

this.add(BorderLayout.CENTER, mapWithButton);

【讨论】:

  • BorderLayout.centerCenter() 为组件提供其首选大小,当本机代码在其自己的线程上工作时,该大小可以为零。 BorderLayout.center() 会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2012-08-07
  • 2012-09-10
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多