DirectionsApi от Google не работает в Kotlin - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь реализовать DirectionsApi для рисования полилиний на картах Google в моем приложении для Android с помощью Kotlin.Я добавил нужную библиотеку, используя:

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()

Я предполагаю, что это связано с некоторой проблемой с библиотекой карт Google, использующей класс LocalDateTime, но поскольку я использую kotlin, это не так.в состоянии получить доступ к указанному классу?Есть ли какое-то решение этой проблемы?

1 Ответ

0 голосов
/ 01 октября 2018

Я нашел решение самостоятельно пока.Это не лучшее решение, но решает проблему под рукой.Запишите его здесь, чтобы он мог помочь любому, кто ищет решение той же проблемы.

Переключите зависимость gradle с:

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

на

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

Иэто должно это исправить.

...