Я пытаюсь разобрать массив строк с помощью Дооснащения и GSON, который возвращается из API:GSON Ожидаемого BEGIN_ARRAY но STRING в строке 1 ошибка
Это то, что реакция обычно выглядит (случай 1):
["Scan finished, scan information embedded in this object", "https://www.virustotal.com/url/297c349554bdc7e2f09a85be309f08cb2f16a9174068bd5bc6e298ed90a5eed9/analysis/1485313628/", 8, 64]
Это то, что ответ выглядит как в конкретном случае (CASE 2):
["Scan request successfully queued, come back later for the report", "https://www.virustotal.com/url/d06ed0b4b29aab735ee7b85c5c0af98fd4d983edcc597afe60e4c4ac2e25ea08/analysis/1485847248/", null, null]
в этом случае (CASE 2), я получаю сообщение об ошибке от Retrofit/GSON:
W/System.err: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
01-31 13:42:41.922 15746-15746/com.ssrij.testapp W/System.err: at java.lang.Thread.run(Thread.java:761)
Я называю API вроде этого:
Call<ArrayList<String>> scanResults = myAPI.getScanResults(id);
scanResults.enqueue(...)
и массив их получает штраф в обычном случае (случай 1), но в этом случае (случай 2), он выдает ошибку.
Я думаю, что это из-за нулевых значений. Я попытался использовать адаптер настраиваемого типа, но он не исправил проблему, также установив сериализациюNulls() в GsonBuilder, это не устранило проблему.
Кто-нибудь знает решение?
EDIT: После некоторой дополнительной отладки, кажется, что сервер возвращает строку в CASE 2 вместо массива String по какой-то причине. Когда я вручную нахожу ссылку, я вижу строковый массив, но по какой-то причине ответом является String.
Можете ли вы добавить модель ответа? Проблема в том, что я думаю –
@JasonBourne Я вызываю API следующим образом: 'Call> scanResults = myAPI.getScanResults (id);' и массивList получает заселение штрафа в обычном случае, но в другом случае с нулевым значения, он выдает эту ошибку –
SomeAndroidProgrammar
также добавляет другой результат, когда он выдает ошибку – Pavya