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) {

        }
    });