android - 从 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)
解决方案
所以它是proguard,我必须将库包含在“proguard-rules.pro”中,如下所示:
-keep class com.seatgeek.*{ *; }
-keep class com.seatgeek.placesautocomplete**{ *; }
-keep class com.seatgeek.placesautocomplete.json**{ *; }
-keepclassmembers enum com.seatgeek.* { *; }
推荐阅读
- wordpress - wp_mail 不以 HTML 格式发送电子邮件
- android - 如何创建可绘制的右动画按钮
- linux - 为什么 Linux shell 中带大括号的 `{cat,filename}` 组命令可以工作?
- javascript - 为什么此代码无法通过其 id 更改元素的不透明度
- javascript - 尝试使用 exceljs 设置单元格颜色正在插入新行
- swift - 属性字符串的 Swift 单元测试
- android - 如何使用 Android Paging 3 跳转滚动
- r - 尽管在 R 中并行化,但处理速度很慢
- python - 比较两个列表并从 list2 中删除第一个匹配的重复项
- azure - Azure Runbook foreach 循环