有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Gson为多个JSON对象编写TypeAdapter?

我有一个包含多个嵌套JSON对象的JSON提要。我已经编写了我的POJO类,并在这里研究了如何反序列化嵌套的JSON对象以访问我需要的数据。但是,我仍然在我的嵌套JSON对象上接收NullPointerExceptions:

JSON提要示例

{
    "data": [
        {
            "relationships": {
                "dismissals": {
                    "meta": {
                        "count": {
                            "home": 0,
                            "away": 0
                        }
                    },
                    "data": []
                },
                "home": {
                    "data": {
                        "type": "teams",
                        "id": "2"
                    }
                }
            }
        }
    ]
}        

Pojo映射

关系:

public class Relationships implements Serializable

    @SerializedName("region")
    @Expose
    private Region region;
    @SerializedName("competition")
    @Expose
    private Competition competition;

getters and setters

}

地区:

public class Region implements Serializable
{

    @SerializedName("data")
    @Expose
    private Data data;

}

数据

public class Data implements Serializable, Parcelable
{

    @SerializedName("type")
    @Expose
    private String type;
    @SerializedName("id")
    @Expose
    private String id;

}

我的TypeAdapter

public class ItemTypeDataFactory implements TypeAdapterFactory {

    public <T> TypeAdapter<T> create(Gson gson, final TypeToken<T> type) {

        final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
        final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);

        return new TypeAdapter<T>() {

            public void write(JsonWriter out, T value) throws IOException {
                delegate.write(out, value);
            }

            public T read(JsonReader in) throws IOException {

                JsonElement jsonElement = elementAdapter.read(in);
                if (jsonElement.isJsonObject()) {
                    JsonObject jsonObject = jsonElement.getAsJsonObject();

                }

                return delegate.fromJsonTree(jsonElement);
            }
        }.nullSafe();
    }}

改装建造商:

 Gson gson = new GsonBuilder()
                .registerTypeAdapterFactory(new ItemTypeDataFactory()) // This is the important line ;)
                .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'")
                .create();

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

例如,我想得到:

getRelationships().getDissmissals().Meta().Count().Home();

当我运行我的应用程序时,我得到了NullPointerException

我是否需要向我的类型适配器中添加一些东西来反序列化类,以便在多个嵌套的JSON对象中获取数据?我已经试着在这里观看了,但没有任何效果


共 (1) 个答案