使用JSONObject调用改进。

时间:2017-01-10 13:36:09

标签: java android retrofit2 okhttp3

我必须从服务器发出get请求,这会给我很多信息。从我发现的搜索结果看来,我只能用模型类来做到这一点。事情是,为了涵盖服务器发送给我的所有响应,我必须制作53个模型类来存储信息。

我想知道是否有更简单的方法,比如将信息存储在JSON或其他东西中。

我正在使用OKHttp进行Retrofit。

getTimeSessionsCall.enqueue(new Callback<JSONObject>() {
        @Override
        public void onResponse(Call<JSONObject> call, Response<JSONObject> response) {

            Log.i("getTimeSessions",Integer.toString(response.code()));

        }

        @Override
        public void onFailure(Call<JSONObject> call, Throwable t) {

        }
    });

我试过这种电话而且什么都没有存储。代码是200,但JSON仍为空。

提前谢谢!

2 个答案:

答案 0 :(得分:5)

JSONObject为空的原因是因为Retrofit不知道如何解析您的响应。你可以做的是将响应作为字符串获取,然后从中构造一个JsonObject。为此,您需要使用ScalarConvertorsFactory,您的方法将类似于

getTimeSessionsCall.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {

           // Get the string and convert to JSONObject

        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {

        }
    });

别忘了添加

compile 'com.squareup.retrofit2:converter-scalars:2.1.0'并在使用addConvertorFactory(ScalarsConvertorFactory.create())构建Retrofit实例时添加转换器工厂

答案 1 :(得分:1)

我建议使用GsonConverterFactory

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

您可以使用this tool根据json响应的架构创建json对象。使用这些工具,您可以享受将JSON转换为Java对象的神奇功能。