我发现的帖子都没有帮助我理解我应该做的事情。坚持这一点已经有一段时间了,所以问这里。我希望IN和OUT名称列表为"在"和" out"是json数组。该错误在OnFailure响应中显示为异常。 getUsers()是主要活动。
private void getUsers() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
APIInterface api = retrofit.create(APIInterface.class);
Call<List<In>> call1 = api.getInUsers();
call1.enqueue(new Callback<List<In>>() {
@Override
public void onResponse(Call<List<In>> call1, Response<List<In>> response) {
List<In> inUsers = response.body();
Log.v("InUsers",String.valueOf(inUsers));
data.add(new Vote(Vote.HEADER_TYPE,"IN"));
mAdapter.notifyDataSetChanged();
for(In vote : inUsers) {
data.add(new Vote(Vote.ITEM_TYPE,String.valueOf(vote)));
}
}
@Override
public void onFailure(Call<List<In>> call1, Throwable t) {
Toast.makeText(getActivity().getApplicationContext(), t.getMessage() + "IN LIST", Toast.LENGTH_LONG).show();
}
});
}
json是:
{
"message": "Hello World.",
"planData": {
"planId":"44444410",
"votesData": {
"votes": {
"in":[
{
"firstName" : "Raj",
"lastName" : "Taj"
},
{
"firstName" : "Badger",
"lastName" : "Tagger"
},
{
"firstName" : "Candle",
"lastName" : "Bangle"
}
] ,
"out" : [
{
"firstName" : "Bonnie",
"lastName" : "Clooney"
},
{
"firstName" : "Clyde",
"lastName" : "Hyde"
}
]
}
}
}
}
界面:
public interface APIInterface {
@GET("/")
Call<List<In>> getInUsers();
@GET("/")
Call<List<Out>> getOutUsers();
}
我从http://www.jsonschema2pojo.org/
获得了模型在示例类中只有message和planId。我最初在接口中调用了示例类。但是认为错误可能是因为它因此将其更改为List但没有。
网站上的POJO代码:
>
> -----------------------------------com.example.Example.java-----------------------------------
>
> package com.example;
>
> import com.google.gson.annotations.Expose; import
> com.google.gson.annotations.SerializedName;
>
> public class Example {
>
> @SerializedName("message") @Expose private String message;
> @SerializedName("planData") @Expose private PlanData planData;
>
> public String getMessage() { return message; }
>
> public void setMessage(String message) { this.message = message; }
>
> public PlanData getPlanData() { return planData; }
>
> public void setPlanData(PlanData planData) { this.planData = planData;
> }
>
> }
> -----------------------------------com.example.In.java-----------------------------------
>
> package com.example;
>
> import com.google.gson.annotations.Expose; import
> com.google.gson.annotations.SerializedName;
>
> public class In {
>
> @SerializedName("firstName") @Expose private String firstName;
> @SerializedName("lastName") @Expose private String lastName;
>
> public String getFirstName() { return firstName; }
>
> public void setFirstName(String firstName) { this.firstName =
> firstName; }
>
> public String getLastName() { return lastName; }
>
> public void setLastName(String lastName) { this.lastName = lastName; }
>
> }
> -----------------------------------com.example.Out.java-----------------------------------
>
> package com.example;
>
> import com.google.gson.annotations.Expose; import
> com.google.gson.annotations.SerializedName;
>
> public class Out {
>
> @SerializedName("firstName") @Expose private String firstName;
> @SerializedName("lastName") @Expose private String lastName;
>
> public String getFirstName() { return firstName; }
>
> public void setFirstName(String firstName) { this.firstName =
> firstName; }
>
> public String getLastName() { return lastName; }
>
> public void setLastName(String lastName) { this.lastName = lastName; }
>
> }
> -----------------------------------com.example.PlanData.java-----------------------------------
>
> package com.example;
>
> import com.google.gson.annotations.Expose; import
> com.google.gson.annotations.SerializedName;
>
> public class PlanData {
>
> @SerializedName("planId") @Expose private String planId;
> @SerializedName("votesData") @Expose private VotesData votesData;
>
> public String getPlanId() { return planId; }
>
> public void setPlanId(String planId) { this.planId = planId; }
>
> public VotesData getVotesData() { return votesData; }
>
> public void setVotesData(VotesData votesData) { this.votesData =
> votesData; }
>
> }
> -----------------------------------com.example.Votes.java-----------------------------------
>
> package com.example;
>
> import java.util.List; import com.google.gson.annotations.Expose;
> import com.google.gson.annotations.SerializedName;
>
> public class Votes {
>
> @SerializedName("in") @Expose private List<In> in = null;
> @SerializedName("out") @Expose private List<Out> out = null;
>
> public List<In> getIn() { return in; }
>
> public void setIn(List<In> in) { this.in = in; }
>
> public List<Out> getOut() { return out; }
>
> public void setOut(List<Out> out) { this.out = out; }
>
> }
> -----------------------------------com.example.VotesData.java-----------------------------------
>
> package com.example;
>
> import com.google.gson.annotations.Expose; import
> com.google.gson.annotations.SerializedName;
>
> public class VotesData {
>
> @SerializedName("votes") @Expose private Votes votes;
>
> public Votes getVotes() { return votes; }
>
> public void setVotes(Votes votes) { this.votes = votes; }
>
> }
答案 0 :(得分:1)
解析服务器响应的正确方法
更改界面
-c
更改电话
-b
答案 1 :(得分:0)
您正在尝试从响应中获取Json数组,但rsponse包含JsonObject
答案 2 :(得分:0)
你必须这样做。
public interface APIInterface {
@GET("/")
Call<Example> getInUsers();
@GET("/")
Call<List<Out>> getOutUsers();
}
您的活动如下。
Call<Example> call1 = api.getInUsers();
call1.enqueue(new Callback<Example>() {
@Override
public void onResponse(Call<Example> call1, Response<Example> response) {
List<In> inUsers = response. getPlanData(). getVotesData().getVotes().getIn();
Log.v("InUsers",String.valueOf(inUsers));
data.add(new Vote(Vote.HEADER_TYPE,"IN"));
mAdapter.notifyDataSetChanged();
for(In vote : inUsers) {
data.add(new Vote(Vote.ITEM_TYPE,String.valueOf(vote)));
}
}
@Override
public void onFailure(Call<Example> call1, Throwable t) {
Toast.makeText(getActivity().getApplicationContext(), t.getMessage() + "IN LIST", Toast.LENGTH_LONG).show();
}
});
答案 3 :(得分:0)
API不会返回List<In>
或List<Out>
。相反,它返回一个Example对象。而不是
public interface APIInterface {
@GET("/")
Call<List<In>> getInUsers();
@GET("/")
Call<List<Out>> getOutUsers();
}
你应该使用
public interface APIInterface {
@GET("/")
Call<Example> getUsers();
}
所以你的电话应该是这样的:
Call<Example> call = api.getInUsers();
call.enqueue(new Callback<Example>() {
@Override
public void onResponse(Call<Example> call1, Response<Example> response) {
// ... whatever you want to do with that data.
// E.g. you can access inUsers via response.body().getPlanData().getVotesData().getVotes().getIn();
}
// ...
});