gpt4 book ai didi

java - 改造请求为特定数据模型返回 null

转载 作者:行者123 更新时间:2023-11-30 00:43:04 25 4
gpt4 key购买 nike

我正在尝试向 Imgur API 发出 API 请求应该返回以下数据模型:

"data": [{
"id": "CiDkx",
"title": "Did You Know",
[...]
} [...]
],
"success": true,
"status": 200
}

但我不明白如何实现它。

到目前为止,这是我尝试这样做的方法:

public interface ImgurAPI {
@GET("gallery/hot/viral/{page}")
Call<ImageData> getGallery(@Path("page") String page);
}

static final String BASE_URL = "https://api.imgur.com/3/";

public void start() {
Gson gson = new GsonBuilder()
.setLenient()
.create();

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

ImgurAPI githubAPI = retrofit.create(ImgurAPI.class);

Call<ImageData> call = githubAPI.getGallery("0");
call.enqueue(this);
}

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onResponse(Call<ImageData> call, Response<ImageData> response) {
if(response.isSuccessful()) {
ImageData image = response.body();
} else {
System.out.println(response.errorBody());
}
}

ImageData 是这样的容器类:

public class ImageData {
public String id;
public String title;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}
}

请求确实通过了,但我收到的响应有一个 null 的 id 和 title。

我几乎可以肯定我还没有理解如何组织我的模型(或者我应该说容器?)类,在这个意义上我是对的吗?

最佳答案

您非常接近这一点,我建议调试或添加一些 Retrofit 日志记录来弄清楚。

在没有看到更多信息的情况下,您的 ImageData 类似乎与您使用的 JSON 不匹配。看看https://api.imgur.com/3/gallery/hot/viral/0.json ...

{
"data": [{
"id": "CiDkx",
"title": "Did You Know",
"description": null,
"datetime": 1487140997,
"cover": "yZXOBMq",
...
}]

从一个未命名的对象开始,它包含一个名为“数据”的数组,并且包含每个图像信息的更多对象,例如 ID 和标题等您正在使用的信息。

您的 ImageData 类只是图像数据项之一,它不是 Retrofit 和 GSON 正在获取并试图解析的集合。您需要一个集合类,或进一步的注释。尝试这样的事情......

    public class ImageDataCollection {

@SerializedName("data")
private List<ImageData> imageDataList;

public List<ImageData> getImageDataList() {
return imageDataList;
}

public void setImageDataList(List<ImageData> imageDataList) {
this.imageDataList = imageDataList;
}
}

然后让您的 ImgUr 接口(interface)处理该集合包装器,而不是单个 ImageData 对象。 (请注意,如果您想检查一下,您也可以将成功和状态字段等添加到外部集合/包装器中,这可能是个好主意。)

关于java - 改造请求为特定数据模型返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42255143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com