【问题标题】:Google’s DirectionsApi doesnt appear to work in KotlinGoogle Directions Api 似乎在 Kotlin 中不起作用
【发布时间】:2018-10-01 12:05:27
【问题描述】:

我正在尝试实现 DirectionsApi 以使用 Kotlin 在我的 Android 应用程序中的 Google 地图上绘制折线。我使用以下方法添加了所需的库:

implementation 'com.google.maps:google-maps-services:0.9.0'

然后在我的 MapFragment 中包含以下函数:

private fun getGeoContext() : GeoApiContext {
    val geoApiContext = GeoApiContext.Builder()
            .apiKey(getString(R.string.directions_apikey))
            .build()
    return geoApiContext
}

最后在我的 onMapReady 中,我尝试使用以下方法获取路线结果:

val origin = "Hotel Hillview Munnar, State Highway 16, Moolakadai, Munnar, Kerala, India"
val dest = "Echo Point, Kannan Devan Hills, Kerala, India"

val apiRequest = DirectionsApi.newRequest(getGeoContext())
        apiRequest.origin(origin)
        apiRequest.destination(dest)
        apiRequest.mode(TravelMode.DRIVING)
        apiRequest.setCallback(object : com.google.maps.PendingResult.Callback<DirectionsResult> {
            override fun onResult(result:DirectionsResult) {
                Timber.i("Call Success")
                val routes = result.routes
            }
            override fun onFailure(e:Throwable) {
            }
        })

但它总是失败。我检查了 Logcat 日志,发现这是错误:

10-01 17:22:41.248 4112-4193/com.acme.internal E/AndroidRuntime: FATAL EXCEPTION: Rate Limited Dispatcher
    Process: com.acme.internal, PID: 4112
    java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/LocalDateTime;
        at com.google.maps.internal.OkHttpPendingResult.parseResponse(OkHttpPendingResult.java:241)
        at com.google.maps.internal.OkHttpPendingResult.onResponse(OkHttpPendingResult.java:207)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.LocalDateTime" on path: DexPathList[[zip file "/data/app/com.acme.internal-1/base.apk"],nativeLibraryDirectories=[/data/app/com.acme.internal-1/lib/arm64, /vendor/lib64, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        at com.google.maps.internal.OkHttpPendingResult.parseResponse(OkHttpPendingResult.java:241) 
        at com.google.maps.internal.OkHttpPendingResult.onResponse(OkHttpPendingResult.java:207) 
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153) 
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
        at java.lang.Thread.run(Thread.java:818) 
      Suppressed: java.lang.ClassNotFoundException: java.time.LocalDateTime
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 8 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
10-01 17:22:41.248 4112-4193/com.acme.internal E/AbstractTracker: Can't create handler inside thread that has not called Looper.prepare()

我猜这与使用 LocalDateTime 类的谷歌地图库的一些问题有关,但是由于我使用的是 kotlin,所以它无法访问该类?这个问题有解决办法吗?

【问题讨论】:

  • 你使用的是哪个 JDK 版本?
  • 我已将 Android Studio 的 JDK 版本设置为嵌入式,并检查了 File->Project Structure 中的路径,它显示为 1.8.0_152。如果您的意思是我已包含在我的 gradle 依赖项中的那个,那么它是实现“org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.71”。我已经尝试添加 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 以查看是否可以解决我的问题,但没有解决。
  • 我现在通过从 0.9.0 更改版本解决了这个问题。到 0.2.11
  • 能否尝试在运行 API 26 或更高版本的设备上运行代码,因为 Android API 26 中引入了LocalDateTime。而 google-maps-services 是为服务器端 java 设计的,请参考 @987654322 @

标签: java android google-maps kotlin google-maps-android-api-2


【解决方案1】:

我现在自己想出了一个解决方案。这不是最好的解决方法,但可以解决手头的问题。将其写在这里,以便它可以帮助其他人寻找相同问题的解决方案。

从以下位置切换 gradle 依赖项:

implementation 'com.google.maps:google-maps-services:0.9.0'

implementation 'com.google.maps:google-maps-services:0.2.11'

它应该修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2011-09-22
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多