繁体   English   中英

Android-使用Retrofit 2.1.0的简单JSON对象响应?

[英]Android - Simple JSON object response using Retrofit 2.1.0?

当我连接到Web服务时,它得到了下面的json

[
    {"Key":"Sucsess",
    "Value":{
    "Family":"Warton",
    "Name":"James",
    "Role":"student",
    "Status":"true"}
    }
]

我如何从这个json获取数据?

我从该站点使用并获得了两个类:

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;
    }
}

以及如何在代码中使用上述类:

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

        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM