首页 > 解决方案 > 从 Play 控制台安装应用程序后 Google Places API 崩溃

问题描述

在将我的应用程序上传到 Play 商店之前,我在 Play 控制台中创建了一个测试版本。该应用程序有一个地方自动完成字段,但是,当我从 Playstore 安装我的应用程序的测试版本时,每次我在自动完成字段中写一些东西然后按空格键就崩溃了!

在 android studio 上测试应用程序时,它运行完美,没有任何错误或崩溃。

谢谢你的帮助。

编辑:我正在使用这个自动完成库(https://github.com/seatgeek/android-PlacesAutocompleteTextView

这是崩溃报告标题:

java.lang.AssertionError

崩溃报告:

java.lang.AssertionError: 
  at com.google.gson.Gson.fromJson (Gson.java)
  at com.google.gson.Gson.fromJson (Gson.java)
  at com.seatgeek.placesautocomplete.json.GsonPlacesApiJsonParser.autocompleteFromStream (GsonPlacesApiJsonParser.java:14)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient$1.handleStreamResult (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient$1.handleStreamResult (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.model.Status.isSuccessful (Status.java:30)
  at com.seatgeek.placesautocomplete.network.HttpUrlConnectionMapsHttpClient.isErrorResponse (HttpUrlConnectionMapsHttpClient.java:30)
  at com.seatgeek.placesautocomplete.network.HttpUrlConnectionMapsHttpClient.executeNetworkRequest (HttpUrlConnectionMapsHttpClient.java:30)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient.executeAutocompleteRequest (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.PlacesApi.autocomplete (PlacesApi.java)
  at com.seatgeek.placesautocomplete.adapter.PlacesApiFilter.performFiltering (PlacesApiFilter.java)
  at android.widget.Filter$RequestHandler.handleMessage (Filter.java:236)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:214)
  at android.os.HandlerThread.run (HandlerThread.java:67)
Caused by: java.lang.AssertionError: 
  at com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter.<init> (TypeAdapters.java:87)
  at com.google.gson.internal.bind.TypeAdapters$30.create (TypeAdapters.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create (CollectionTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create (CollectionTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.Gson.fromJson (Gson.java)
  at com.google.gson.Gson.fromJson (Gson.java)
  at com.seatgeek.placesautocomplete.json.GsonPlacesApiJsonParser.autocompleteFromStream (GsonPlacesApiJsonParser.java:14)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient$1.handleStreamResult (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient$1.handleStreamResult (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.model.Status.isSuccessful (Status.java:30)
  at com.seatgeek.placesautocomplete.network.HttpUrlConnectionMapsHttpClient.isErrorResponse (HttpUrlConnectionMapsHttpClient.java:30)
  at com.seatgeek.placesautocomplete.network.HttpUrlConnectionMapsHttpClient.executeNetworkRequest (HttpUrlConnectionMapsHttpClient.java:30)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient.executeAutocompleteRequest (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.PlacesApi.autocomplete (PlacesApi.java)
  at com.seatgeek.placesautocomplete.adapter.PlacesApiFilter.performFiltering (PlacesApiFilter.java)
  at android.widget.Filter$RequestHandler.handleMessage (Filter.java:236)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:214)
  at android.os.HandlerThread.run (HandlerThread.java:67)
Caused by: java.lang.NoSuchFieldException: 
  at java.lang.Class.getField (Class.java:1604)
  at com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter.<init> (TypeAdapters.java:34)
  at com.google.gson.internal.bind.TypeAdapters$30.create (TypeAdapters.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create (CollectionTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create (CollectionTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create (ReflectiveTypeAdapterFactory.java)
  at com.google.gson.Gson.getAdapter (Gson.java:68)
  or                     .setDelegate (Gson.java:68)
  at com.google.gson.Gson.fromJson (Gson.java)
  at com.google.gson.Gson.fromJson (Gson.java)
  at com.seatgeek.placesautocomplete.json.GsonPlacesApiJsonParser.autocompleteFromStream (GsonPlacesApiJsonParser.java:14)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient$1.handleStreamResult (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient$1.handleStreamResult (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.model.Status.isSuccessful (Status.java:30)
  at com.seatgeek.placesautocomplete.network.HttpUrlConnectionMapsHttpClient.isErrorResponse (HttpUrlConnectionMapsHttpClient.java:30)
  at com.seatgeek.placesautocomplete.network.HttpUrlConnectionMapsHttpClient.executeNetworkRequest (HttpUrlConnectionMapsHttpClient.java:30)
  at com.seatgeek.placesautocomplete.network.AbstractPlacesHttpClient.executeAutocompleteRequest (AbstractPlacesHttpClient.java)
  at com.seatgeek.placesautocomplete.PlacesApi.autocomplete (PlacesApi.java)
  at com.seatgeek.placesautocomplete.adapter.PlacesApiFilter.performFiltering (PlacesApiFilter.java)
  at android.widget.Filter$RequestHandler.handleMessage (Filter.java:236)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:214)
  at android.os.HandlerThread.run (HandlerThread.java:67)

标签: androidgoogle-play-servicesgoogle-places-apigoogle-play-consolegoogleplacesautocomplete

解决方案


所以它是proguard,我必须将库包含在“proguard-rules.pro”中,如下所示:

-keep class com.seatgeek.*{ *; }
-keep class com.seatgeek.placesautocomplete**{ *; }
-keep class com.seatgeek.placesautocomplete.json**{ *; }
-keepclassmembers enum com.seatgeek.* { *; }

推荐阅读