簡體   English   中英

改進如何打印響應JSON

[英]Retrofit How To Print Out Response JSON

我正在使用Retrofit,我希望能夠訪問從服務器返回的JSON響應。 有人可以告訴我。 謝謝

如果您只想查看響應的調試目的,只需打開改造中的調試並查看日志。 它是這樣的:

restAdapter.setDebuggingEnabled(true);

如果您需要始終在代碼中訪問直接響應,那么您應該在httpclient級別執行此操作,因為它基本上繞過了改造的目的

要打印響應對象,首先通過Callback<Object> cb將回調對象類型更改為通用對象類型。 然后在成功回調中,您可以只記錄對象以將Json格式化版本打印到控制台。

@Override
public void success(Object o, Response response) {
    Log.i("Tag", "Login data " + o.toString());
}

要打印請求對象,您可以使用您使用的任何Json庫(這里我使用Gson )將請求對象序列化為Json並將其記錄到控制台。

Log.i("Tag", "Request data " + new Gson().toJson(requestObject));

您需要以字符串格式獲取響應,然后使用gson解析數據。 要獲得String響應,您可以通過擴展retrofit.converter.Converter來使用CustomStringConverter,或者只是從成功結果的響應中獲取輸入流。

public void success(Response r1, Response r2) {

    IntputStream in  = r1.getBody().in()
       //convert this inputstream to string
}

如果你想使用Retrofit的全部功能並為自己保留原始輸入(例如將其保存在持久緩存中),你可以擴展轉換器 ,例如

RestAdapter restAdapter = new RestAdapter.Builder()
    .setConverter(new GsonConverter(gson) {
        @Override
        public Object fromBody(TypedInput body, Type type) throws ConversionException {
            try {
                byte[] buffer = new byte[body.length()];
                body.in().read(buffer);
                body.in().reset();
            }
            catch (IOException e) {
                throw new ConversionException(e);
            }
            return super.fromBody(body, type);
        }
    })
    ...build();
ResponseInterface ri = restAdapter.create(ResponseInterface.class);

您也可以像這樣記錄結果

mRestAdapter = new RestAdapter.Builder()
            .setEndpoint(getBaseUrl())
            .setLogLevel(RestAdapter.LogLevel.FULL) //Log the result
            .build();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM