Android - 使用 Retrofit 2.1.0 的简单 JSON 对象响应?
Android - Simple JSON object response using Retrofit 2.1.0?
当我连接到网络服务时,它让我发出下面的声音 json
:
[
{"Key":"Sucsess",
"Value":{
"Family":"Warton",
"Name":"James",
"Role":"student",
"Status":"true"}
}
]
如何从此 json
获取数据?
我用这个 SITE 给我两个 class :
1- ModelSignIn.class
:
public class ModelSignIn {
@SerializedName("Family")
@Expose
private String family;
@SerializedName("Name")
@Expose
private String name;
@SerializedName("Role")
@Expose
private String role;
@SerializedName("Status")
@Expose
private String status;
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
2- JsonSignIn.class
:
public class JsonSignIn {
@SerializedName("Key")
@Expose
private String key;
@SerializedName("Value")
@Expose
private ModelSignIn modelSignIn;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public ModelSignIn getValue() {
return modelSignIn;
}
public void setValue(ModelSignIn modelSignIn) {
this.modelSignIn = modelSignIn;
}
}
以及如何在我的代码中使用上面的 classes :
public class ConnectRetrofits {
private void loadJSONLogin(String username, String password) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ConstUrl.BaseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
Interface_SignIn request = retrofit.create(Interface_SignIn.class);
Call<ModelSignIn> call = request.getJSONSignIn(username, password);
call.enqueue(new Callback<ModelSignIn>() {
@Override
public void onResponse(Call<ModelSignIn> call, Response<ModelSignIn> response) {
JsonSignIn JSI = new JsonSignIn();
}
@Override
public void onFailure(Call<ModelSignIn> call, Throwable t) {
}
});
}
}
和Interface_SignIn.class
:
public interface Interface_SignIn {
@GET("/GiveData.svc/login/{UserName}/{Password}")
Call<ModelSignIn> getJSONSignIn(@Path("UserName") String UserName,
@Path("Password") String Password);
}
由于您使用的是 gson 转换器,因此您可以将响应转换为 ModelSignIn
public void onResponse(Call<ModelSignIn> call, Response<ModelSignIn> response) {
ModelSignIn msi = (ModelSignIn)response.body();
...
那么你可以只获取元素:
msi.getName();
等...
使用body()
方法获取您的响应模型。在您的情况下,您的请求模型不正确。在您的情况下,出于某种原因,响应是一个数组。而父对象是JsonSignIn
。所以你需要相应地更新你的代码。
public interface Interface_SignIn {
@GET("/GiveData.svc/login/{UserName}/{Password}")
Call<List<JsonSignIn>> getJSONSignIn(@Path("UserName") String UserName,
@Path("Password") String Password);
}
别忘了更新您的请求。
Call<List<JsonSignIn>> call = request.getJSONSignIn(username, password);
call.enqueue(new Callback<List<JsonSignIn>>() {
@Override
public void onResponse(Call<ModelSignIn> call, Response<List<JsonSignIn>> response) {
List<JsonSignIn> JSI = response.body();
}
@Override
public void onFailure(Call<List<JsonSignIn>> call, Throwable t) {
}
});
当我连接到网络服务时,它让我发出下面的声音 json
:
[
{"Key":"Sucsess",
"Value":{
"Family":"Warton",
"Name":"James",
"Role":"student",
"Status":"true"}
}
]
如何从此 json
获取数据?
我用这个 SITE 给我两个 class :
1- ModelSignIn.class
:
public class ModelSignIn {
@SerializedName("Family")
@Expose
private String family;
@SerializedName("Name")
@Expose
private String name;
@SerializedName("Role")
@Expose
private String role;
@SerializedName("Status")
@Expose
private String status;
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
2- JsonSignIn.class
:
public class JsonSignIn {
@SerializedName("Key")
@Expose
private String key;
@SerializedName("Value")
@Expose
private ModelSignIn modelSignIn;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public ModelSignIn getValue() {
return modelSignIn;
}
public void setValue(ModelSignIn modelSignIn) {
this.modelSignIn = modelSignIn;
}
}
以及如何在我的代码中使用上面的 classes :
public class ConnectRetrofits {
private void loadJSONLogin(String username, String password) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ConstUrl.BaseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
Interface_SignIn request = retrofit.create(Interface_SignIn.class);
Call<ModelSignIn> call = request.getJSONSignIn(username, password);
call.enqueue(new Callback<ModelSignIn>() {
@Override
public void onResponse(Call<ModelSignIn> call, Response<ModelSignIn> response) {
JsonSignIn JSI = new JsonSignIn();
}
@Override
public void onFailure(Call<ModelSignIn> call, Throwable t) {
}
});
}
}
和Interface_SignIn.class
:
public interface Interface_SignIn {
@GET("/GiveData.svc/login/{UserName}/{Password}")
Call<ModelSignIn> getJSONSignIn(@Path("UserName") String UserName,
@Path("Password") String Password);
}
由于您使用的是 gson 转换器,因此您可以将响应转换为 ModelSignIn
public void onResponse(Call<ModelSignIn> call, Response<ModelSignIn> response) {
ModelSignIn msi = (ModelSignIn)response.body();
...
那么你可以只获取元素:
msi.getName();
等...
使用body()
方法获取您的响应模型。在您的情况下,您的请求模型不正确。在您的情况下,出于某种原因,响应是一个数组。而父对象是JsonSignIn
。所以你需要相应地更新你的代码。
public interface Interface_SignIn {
@GET("/GiveData.svc/login/{UserName}/{Password}")
Call<List<JsonSignIn>> getJSONSignIn(@Path("UserName") String UserName,
@Path("Password") String Password);
}
别忘了更新您的请求。
Call<List<JsonSignIn>> call = request.getJSONSignIn(username, password);
call.enqueue(new Callback<List<JsonSignIn>>() {
@Override
public void onResponse(Call<ModelSignIn> call, Response<List<JsonSignIn>> response) {
List<JsonSignIn> JSI = response.body();
}
@Override
public void onFailure(Call<List<JsonSignIn>> call, Throwable t) {
}
});