gpt4 book ai didi

java - 没有从 Retrofit 获得任何数据

转载 作者:行者123 更新时间:2023-11-30 12:05:11 26 4
gpt4 key购买 nike

我对 Retrofit 调用有疑问。我想获取一些数据,只是为了测试目的,看看是否有任何结果,但如您所见,没有任何结果。我得到了 0、0.0、null 之类的数据。

JSON 响应

    {
"page": 1,
"total_results": 1295,
"total_pages": 65,
"results": [
{
"vote_count": 1669,
"id": 10515,
"video": false,
"vote_average": 8,
"title": "Castle in the Sky",
"popularity": 15.853,
"poster_path": "\/npOnzAbLh6VOIu3naU5QaEcTepo.jpg",
"original_language": "ja",
"original_title": "天空の城ラピュタ",
"genre_ids": [
12,
14,
16,
28,
10751,
10749
],
"backdrop_path": "\/fnMzL4G6HYilH1w1leFXOY5b29m.jpg",
"adult": false,
"overview": "A young boy and a girl with a magic crystal must race against pirates and foreign agents in a search for a legendary floating castle.",
"release_date": "1986-08-02"
},
{
"vote_count": 154,
"id": 487672,
"video": false,
"vote_average": 6.7,
"title": "Reign of the Supermen",
"popularity": 15.461,
"poster_path": "\/e9TzqscNRUaG8HqEP3K1jUvi8pC.jpg",
"original_language": "en",
"original_title": "Reign of the Supermen",
"genre_ids": [
16,
28,
878
],
"backdrop_path": "\/cdCMUHWyXBOsbLL4dOEPdCEtwM4.jpg",
"adult": false,
"overview": "In the wake of The Death of Superman, the world is still mourning the loss of the Man of Steel following his fatal battle with the monster Doomsday. However, no sooner as his body been laid to rest than do four new bearers of the Superman shield come forward to take on the mantle. The Last Son of Krypton, Superboy, Steel, and the Cyborg Superman all attempt to fill the vacuum left by the world's greatest champion. Meanwhile, Superman's death has also signaled to the universe that Earth is vulnerable. Can these new Supermen and the rest of the heroes prove them wrong?",
"release_date": "2019-01-13"
}
]
}

接口(interface)调用

@GET("3/discover/movie?api_key=APIKEY&with_genres=27")
Call<model> getABC();

retrofit 电话

    String url = "https://api.themoviedb.org/";

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

apiCall api = retrofit.create(apiCall.class);

Call<model> call = api.getABC();
call.enqueue(new Callback<model>() {
@Override
public void onResponse(Call<model> call, Response<model> response) {
if (!response.isSuccessful()){
}
List<model> list = Collections.singletonList(response.body());

for (model model : list) {
String content = "";
content += model.getVote_count() + "\n";
content += model.getVote_average() + "\n";
content += model.getOverview() + "\n\n\n";

System.out.println(content);
}
}

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

}
});
}

POJO

public class model {
@SerializedName("vote_count")
private int vote_count;
@SerializedName("vote_average")
private double vote_average;
@SerializedName("overview")
private String overview;

public int getVote_count() {
return vote_count;
}

public double getVote_average() {
return vote_average;
}

public String getOverview() {
return overview;
}

我应该在代码中更改什么?我会感激每一个提示。我从通话中收到的代码是 200 - 所以通话成功,我的 pojo 类有问题吗?

*已编辑的 POJO

public class model {

@SerializedName("results")
@Expose
private List<movies> results;

public List<movies> getResults() {
return results;
}

class movies {
@SerializedName("vote_count")
@Expose
private Integer voteCount;
@SerializedName("vote_average")
@Expose
private Double voteAverage;
@SerializedName("overview")
@Expose
private String overview;
}
}

编辑后的 retrofit 电话

public void onResponse(Call<model> call, Response<model> response) {
if (!response.isSuccessful()){
}
List<model> list = Collections.singletonList(response.body());

for (model model : list) {
System.out.println(model.getResults());
}
}

这是我收到的部分。

com.example.x.model$movies@5f6763b, 
com.example.x.model$movies@e988158,
com.example.x.model$movies@6812b1,

为什么它没有得到正确的名字?

最佳答案

您的模型类应如下所示:

public class Model {
@SerializedName("page")
private int page;

@SerializedName("results")
private List<Result> results;

@SerializedName("total_results")
private int total;

@SerializedName("total_pages")
private int totalPages;

//.......getter setter methods

}


public class Result{
@SerializedName("vote_count")
private int voteCount;

@SerializedName("vote_average")
private double voteAverage;

@SerializedName("overview")
private String overView;

//.....other fields
//......getter setter methods
}

那么改造调用应该是这样的:

Call<model> call = api.getABC();
call.enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
if (response.isSuccessful()) {
List<Result> results=response.body().getResults();
for(Result result:results){
Log.d(TAG,"Result: "+result.getVoteCount())
}



}
}

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

}
});

快乐编码.... :)

关于java - 没有从 Retrofit 获得任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56520726/

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