首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Yandex MapKit通胀崩溃

Yandex MapKit通胀崩溃
EN

Stack Overflow用户
提问于 2022-06-07 12:23:10
回答 1查看 208关注 0票数 0

我正试图在我的应用程序中实现Yandex MapKit,但不幸的是,它立即崩溃,错误如下:

代码语言:javascript
运行
复制
2022-06-07 15:05:48.838 23491-23491/sbs.pros.parking E/AndroidRuntime: FATAL EXCEPTION: main
Process: sbs.pros.parking, PID: 23491
java.lang.RuntimeException: Unable to start activity ComponentInfo{sbs.pros.parking/sbs.pros.parking.MainActivity}: android.view.InflateException: Binary XML file line #6 in sbs.pros.parking:layout/activity_main: Binary XML file line #6 in sbs.pros.parking:layout/activity_main: Error inflating class com.yandex.mapkit.mapview.MapView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4035)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4201)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:226)
    at android.os.Looper.loop(Looper.java:313)
    at android.app.ActivityThread.main(ActivityThread.java:8669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
 Caused by: android.view.InflateException: Binary XML file line #6 in sbs.pros.parking:layout/activity_main: Binary XML file line #6 in sbs.pros.parking:layout/activity_main: Error inflating class com.yandex.mapkit.mapview.MapView
 Caused by: android.view.InflateException: Binary XML file line #6 in sbs.pros.parking:layout/activity_main: Error inflating class com.yandex.mapkit.mapview.MapView
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
    at android.view.LayoutInflater.createView(LayoutInflater.java:858)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:485)
    at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:533)
    at android.app.Activity.setContentView(Activity.java:3589)
    at sbs.pros.parking.MainActivity.onCreate(MainActivity.kt:43)
    at android.app.Activity.performCreate(Activity.java:8290)
    at android.app.Activity.performCreate(Activity.java:8270)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4009)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4201)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:226)
    at android.os.Looper.loop(Looper.java:313)
    at android.app.ActivityThread.main(ActivityThread.java:8669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
 Caused by: java.lang.AssertionError: You need to set the API key before using MapKit!
    at com.yandex.mapkit.MapKitFactory.checkApiKey(MapKitFactory.java:64)
    at com.yandex.mapkit.MapKitFactory.initialize(MapKitFactory.java:24)
2022-06-07 15:05:48.838 23491-23491/sbs.pros.parking E/AndroidRuntime:     at com.yandex.mapkit.mapview.MapView.<init>(MapView.java:53)
    at com.yandex.mapkit.mapview.MapView.<init>(MapView.java:46)
        ... 29 more

当我交换行setContentView(R.layout.activity_main)和MapKitFactory.initialize(this)时,错误更改为smth,类似于“初始化之前必须先设置api键”。在任何情况下,问题的出现可能是因为api键没有正确设置,尽管我将其包含在应用程序活动中(当它包含在onCreate方法中时,仍然存在相同的错误):

代码语言:javascript
运行
复制
import android.app.Application
import android.util.Log
import com.yandex.mapkit.MapKitFactory

class MyApp : Application() {
private val MAPKIT_API_KEY = "<my actual api key>"
override fun onCreate() {
    super.onCreate()
    Log.w("MY", "onCreate MyApp")
    MapKitFactory.setApiKey(MAPKIT_API_KEY)
}
}

MainActivity.kt:

代码语言:javascript
运行
复制
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.yandex.mapkit.Animation
import com.yandex.mapkit.MapKitFactory
import com.yandex.mapkit.geometry.Point
import com.yandex.mapkit.map.CameraPosition
import com.yandex.mapkit.mapview.MapView


class MainActivity : AppCompatActivity() {

private val TARGET_LOCATION = Point(59.945933, 30.320045)
private val mapView: MapView? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main)

    MapKitFactory.initialize(this)

    val mapView = findViewById<MapView>(R.id.mapview)
    mapView.map.move(
        CameraPosition(TARGET_LOCATION, 11.0f, 0.0f, 0.0f),
        Animation(Animation.Type.SMOOTH, 0F),
        null
    )
}
override fun onStop() {
    mapView?.onStop()
    MapKitFactory.getInstance().onStop()
    super.onStop()
}

override fun onStart() {
    super.onStart()
    MapKitFactory.getInstance().onStart()
    mapView?.onStart()
}

activity_main.xml:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout             
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.yandex.mapkit.mapview.MapView
    android:id="@+id/mapview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</RelativeLayout>

有人知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-07 18:19:54

不管怎么说,你会发现你说的那个错误:

代码语言:javascript
运行
复制
Caused by: java.lang.AssertionError: You need to set the API key before using MapKit!

据猜测,这是因为在调用setContentView之前调用了MapKitFactory.initialize(this) (这会膨胀布局并初始化小部件)。文献资料的示例首先初始化了它:

代码语言:javascript
运行
复制
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    MapKitFactory.initialize(this)
    setContentView(R.layout.activity_main)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72531196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档