如何在Retrofit 2.0.0 beta 1中获得简单的JSON对象?

时间:2015-09-22 00:03:56

标签: android json retrofit

我正在尝试转换看起来像这样的简单响应

    angular.module('test')
      .service('Users', function($q, $http) {

        var api = 'api';
        var cached = [];

        var localPromise;

        var _getAll = function() {

            if (localPromise) {

                return localPromise;
            }

            var deferred = $q.defer();
            if (cached.length > 0) {

                deferred.resolve(cached);
                localPromise = null;
                return deferred.promise;
            }

            var url = api + '/users';

            $http.get(url).then(function(data) {

                cached = data.data;
                deferred.resolve(cached);
                localPromise = null;
            }, function(err) {
                deferred.reject(err);
                localPromise = null;
            });
            localPromise = deferred.promise;
            return deferred.promise;
        }
        return {
            getAll: _getAll
        }
    });

我正在使用最新版本的Retrofit 2.0.0-beta1。我之前从未使用过Retrofit。有很多教程和旧版Retrofit的例子。我尝试了不同的技术,适用于旧版本,但不适用于最新版本。由于缺乏最新版Retrofit的文档,我找不到解决方案。

我想使用最新版本。

这是POJO

{
  "field_one": "bearer",
  "field_two": "fgh",
  "field_three": 0
}

这是我正在使用的界面

public class Auth {
    @SerializedName("field_one")
    @Expose
    private String fieldOne;

    @SerializedName("field_two")
    @Expose
    private String fieldTwo;

    @SerializedName("field_three")
    @Expose
    private Integer fieldThree;

    // setter and getter etc. etc. 
}

这就是我呼叫服务的方式

interface Authorization {
   @Headers("Authorization: This is some header")
   @GET("api/v1/mytoken")
   Call<Auth> getToken();
}

我无法获得输出。它只是打印这个

  OkHttpClient client = new OkHttpClient();

  Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://myendpoint.com/")
            .client(client)
             .addConverterFactory(GsonConverterFactory.create())
            .build();

    Authorization serviceAuthorization = retrofit.create(Authorization.class);
    serviceAuthorization.getToken().enqueue(new Callback<Auth>() {
        @Override
        public void onResponse(Response<Auth> response) {
            Log.d("Response", ">>> "+ response.toString());
        }

        @Override
        public void onFailure(Throwable t) {
            Log.d("fail", ">>> "+ t.getMessage());
        }
    });

我想在Auth Object中获取稍后将使用的数据。

请建议我最佳解决方案

谢谢!

1 个答案:

答案 0 :(得分:1)

我猜你没有看到你期望在这一行打印出你的对象 -

Log.d("Response", ">>> "+ response.toString());

这将在响应上调用toString方法。如果要在反序列化对象上调用它,请先调用body()方法 -

if(response.isSuccess()) {
    Log.d("Response", ">>> "+ response.body().toString());
} else {
    Log.d("Response", "Error - " + response.code())
}