#java #android
#java #Android
Вопрос:
Я получаю List<SkuDetails>
следующее:
public void onSkuDetailsResponse(BillingResult billingResult,
List<SkuDetails> skuDetailsList) {
Gson gson = new Gson();
String json = gson.toJson(skuDetailsList);
Log.d(TAG, json);
Затем я получаю этот незавершенный json:
[{"zza":"{"skuDetailsToken":"s-r3R-r","productId":"chill_lo_fi","type":"inapp","price":"R$ 5,49","price_amount_micros":5490000,"price_currency_code":"BRL","title":"Chill Lo-Fi (SDoubleKick - Footdrum - SS)","description":"Chill Lo-Fi sound pack"}","zzb":{"nameValuePairs":{"skuDetailsToken":"s-r3R-r","productId":"chill_lo_fi","type":"inapp","price":"R$ 5,49","price_amount_micros":5490000,"price_currency_code":"BRL","title":"Chill Lo-Fi (SDoubleKick - Footdrum - SS)","description":"Chill Lo-Fi sound pack"}}},{"zza":"{"skuDetailsToken":"a-r","productId":"percussion_and_fx","type":"inapp","price":"R$ 5,49","price_amount_micros":5490000,"price_currency_code":"BRL","title":"Percussion and Fx (SDoubleKick - Footdrum - SS)","description":"Percussion and Fx sound pack"}","zzb":{"nameValuePairs":{"skuDetailsToken":"s-dsf3
Вы можете видеть, что это список, он должен был быть напечатан правильно, но в итоге я получаю:
"zzb":{"nameValuePairs":{"skuDetailsToken":"s-dsf3
Из-за этого, когда я восстанавливаю этот gson в объект, я получаю исключение
Комментарии:
1. Вы уверены, что ваша
json
строка действительно усечена? Возможно, у регистратора просто есть ограничение на то, сколько он будет печатать для одной строки журнала.
Ответ №1:
Gson
не будет усекать ваши данные JSON. logcat
является ли виновником здесь, по умолчанию, он будет усекать любое сообщение журнала, которое он считает слишком длинным. Это может произойти как внутри вашей IDE, так и при запуске logcat
в командной строке. Чтобы избавиться от ограничения журнала, вы можете разделить строку, которую хотите зарегистрировать, создав оболочку примерно так:
package com.github.fundamentals.array;
public class Log {
public static void d(String tag, String jsonText) {
int maxLogSize = 2000;
for (int i = 0; i <= jsonText.length() / maxLogSize; i ) {
int start = i * maxLogSize;
int end = (i 1) * maxLogSize;
end = end > jsonText.length() ? jsonText.length() : end;
android.util.Log.d(tag, jsonText.substring(start, end));
}
}
}
Вы также можете использовать setPrettyPrinting
on GsonBuilder
для печати строки JSON в удобочитаемом формате (для отладки)
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String prettyJson = gson.toJson(json);
Log.d(TAG, prettyJson);
Комментарии:
1. Я не хочу, чтобы он красиво печатался, я просто хочу, чтобы он отображался полностью. В нем отсутствуют некоторые части.
2. Я думал, что он не показывает весь json из-за какой-то ошибки, но на самом деле это из-за ограничения Log.d?
3. @Guerlando OCs, да logcat начинает ограничивать сообщения журнала, если длина сообщения превышает 1000 символов.