我正在尝试使用MapBox获取android中的用户位置。我的地图是碎片。这就是我初始化它的方式。
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val root = inflater.inflate(R.layout.fragment_second, container, false)
mapView = root.findViewById(R.id.map_view)
mapView?.onCreate(savedInstanceState)
mapView?.getMapAsync { mapboxMap ->
mapboxMap.setStyle(Style.MAPBOX_STREETS) {
enableLocationComponent(it)
}
}
return root
}
当我尝试调用enableLocationComponent(it)时,应用程序正在崩溃。通常,当我从onMapReady()调用它时,它工作正常。但这是另一种情况。我真的不知道把enableLocationComponent(it)放在哪里
所以我终于找到了解决办法。
我必须将样式集从Fragment onCreateView移动到onMapReady函数。然后我可以调用enableLocationComponent()。
最后的代码是这样的:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val root = inflater.inflate(R.layout.fragment_second, container, false)
mapView = root.findViewById(R.id.map_view)
mapView?.onCreate(savedInstanceState)
mapView?.getMapAsync(this)
return root
}
override fun onMapReady(mapboxMap: MapboxMap) {
this.mapboxMap = mapboxMap
mapboxMap.setStyle(Style.MAPBOX_STREETS) {
enableLocationComponent(it)
}
}
您可以检查是否通过设置布尔值true
调用onMapReady()
,然后运行enableLocationComponent(it)
:))或在onMapReady()
中调用处理程序
在需要的位置运行
enableLocationComponent(it)
。
大概是这样的:
var mapLoaded = false
override fun onMapReady(@NonNull mapboxMap:MapboxMap) {
this.mapboxMap = mapboxMap
mapboxMap.setStyle(Style.Builder().fromUri(Style.MAPBOX_STREETS)
.withSource(GeoJsonSource(CIRCLE_GEOJSON_SOURCE_ID))
.withSource(GeoJsonSource(LINE_GEOJSON_SOURCE_ID)), object:Style.OnStyleLoaded {
override fun onStyleLoaded(@NonNull style1:Style) {
mapLoaded = true //then chack this value if is ture call enableLocationComponent(it)
}
})
}
或
lateinit var mHandler : Handler
// initialize this where you want call your function
mHandler = object:Handler(Looper.getMainLooper()) {
override fun handleMessage(message:Message) {
enableLocationComponent(it)
}
}
//onMapReady bi like this
override fun onMapReady(@NonNull mapboxMap:MapboxMap) {
this.mapboxMap = mapboxMap
mapboxMap.setStyle(Style.Builder().fromUri(Style.MAPBOX_STREETS)
.withSource(GeoJsonSource(CIRCLE_GEOJSON_SOURCE_ID))
.withSource(GeoJsonSource(LINE_GEOJSON_SOURCE_ID)), object:Style.OnStyleLoaded {
override fun onStyleLoaded(@NonNull style1:Style) {
mHandler.sendEmptyMessage(0)
}
})
}
*编辑:好的,在修复了try catch错误后,我在< code>catch {..打印时。*,基本上,当我说我想再玩一次时,它会继续游戏,但它也会打印第一个< code>catch,然后在第23行要求输入。 嗨,这是我的第一篇文章,所以如果我在论坛上的代码格式错误,我会编辑它。 现在我正在用java eclipse编写一个游戏,其中cpu生成一个数字,用户必须猜测它。我大部分时间都在使用扫描仪类
我是Kotlin的初学者,我实际上正在Kotlin中做一个Androïd应用程序。我必须初始化一些值未知的属性(它不是,但从现在开始很难定义),所以我想像在TypeScript中一样,例如:这意味着startDate的类型可以是任何东西(它不受保护,但它有助于获得值,而不是关于发生了什么)。 有没有办法在科特林做到这一点?我试过了或者如列表中的* 感谢您的阅读!
问题内容: 这是一段Java代码: 它如何编译?初始化后已执行变量“ ture”的声明。据我所知,静态块和字段已经按照它们出现的顺序执行了。 现在,为什么实例块中的值9已被打印3次?顺便说一句,该类的实例已创建了3次。那不是功课,我正在学习Java进行认证。 问题答案: 关于第一个问题,静态块确实按照它们出现的顺序进行处理,但是在处理静态块之前,先处理声明。声明作为类 准备工作 的一部分(JLS§
我想知道为什么在下面的代码中没有捕捉到异常: 函数的调用方式如下: 但我还是遇到了一个导致应用程序崩溃的异常: 我想说try/catch块会捕获异常,但唉。。。 什么原因导致异常没有被捕获?我想说线程并不重要,因为我使用try/get块来处理线程中的异常。 在Laalto的回答之后,我更新了代码,如下所示(对于那些感兴趣的人):
静态字段何时初始化?如果我从未实例化过一个类,但我访问了一个静态字段,那么用于实例化私有静态字段的所有静态块和私有静态方法(按顺序)都在那一刻被调用了吗?或者什么时候启动应用程序?
我有一个关于初始化的有趣问题。我有以下代码: 现在当我调用ErrorLookupProvider时。getInstance(),我碰到了一个NPE。中的映射未使用新的初始化。 如果我将的声明更改为final,那么我看到它已初始化。或者,即使我删除static并将其作为私有类变量