2016-01-26 3 views
5

У меня есть Модифицированная установить с HttpLoggingInterceptor как это:Как красиво печатать в дооснащении 2?

Gson gson = new GsonBuilder() 
       .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") 
       .setPrettyPrinting() // Pretty print 
       .create(); 

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
OkHttpClient client = new OkHttpClient.Builder() 
       .addInterceptor(interceptor) 
       .build(); 

Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create(gson)) 
       .client(client) 
       .build(); 

На моем случае Gson, я setPrettyPrinting, и я до сих пор получить компактные JSON выходов. Вот мои библиотеки.

compile 'com.google.code.gson:gson:2.5' 
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' 
compile 'com.squareup.okhttp3:logging-interceptor:3.0.1' 

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' 
compile 'com.squareup.okhttp3:okhttp:3.0.1' 

Как я могу получить довольно печатную версию с помощью Retrofit 2? Спасибо.

EDIT: Обновлен мои библиотеки и до сих пор не работает

ответ

0

Beta 2 не всегда соблюдали обычай gson настройки. Попробуйте обновить до бета-версии 3.

От beta 3 change log -

Fix: Преобразователь Gson теперь учитывает настройки на прилагаемом Gson случае (например, как serializeNulls). Для этого требуется Gson 2.4 или новее.

Вам также необходимо обновить до okhttp3 для бета3.

+0

Попробовал с последними beta4 и до сих пор не работает. – Schinizer

2

Создайте свой собственный HttpLogginInterceptor.

public class CustomHttpLogging implements HttpLoggingInterceptor.Logger { 
    @Override 
    public void log(String message) { 
     final String logName = "OkHttp"; 
     if (!message.startsWith("{")) { 
      Log.d(logName, message); 
      return; 
     } 
     try { 
      String prettyPrintJson = new GsonBuilder().setPrettyPrinting().create().toJson(new JsonParser().parse(message)); 
      Log.d(logName, prettyPrintJson); 
     } catch (JsonSyntaxException m) { 
      Log.d(logName, message); 
     } 
    } 
} 

В клиенте, добавьте:

OkHttpClient client = new OkHttpClient.Builder() 
      .addNetworkInterceptor(new CustomHttpLogging()) 
      .build(); 
1

Вдохновленный ответ Tanapruk в этом то, что я сделал, чтобы заставить его работать с моими версиями дооснащения (2.1.0) и okhttp.logging-перехватчик (3.8.1). Извините за сочетание Kotlin и Java.

Эта версия предназначена для печати как объектов JSON, так и массивов.

class ApiLogger : HttpLoggingInterceptor.Logger { 
    override fun log(message: String) { 
     val logName = "ApiLogger" 
     if (message.startsWith("{") || message.startsWith("[")) { 
      try { 
       val prettyPrintJson = GsonBuilder().setPrettyPrinting() 
        .create().toJson(JsonParser().parse(message)) 
       Log.d(logName, prettyPrintJson) 
      } catch (m: JsonSyntaxException) { 
       Log.d(logName, message) 
      } 
     } else { 
      Log.d(logName, message) 
      return 
     } 
    } 
} 

И в клиенте:

OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); 
HttpLoggingInterceptor httpLoggingInterceptor = 
    new HttpLoggingInterceptor(new ApiLogger()); 
httpLoggingInterceptor.setLevel(Level.BODY); 
httpClientBuilder.addInterceptor(httpLoggingInterceptor); 

 Смежные вопросы

  • Нет связанных вопросов^_^