2017-01-17 10 views
0

При подключении к веб-службе, это заставить меня реветь json:Android - Простой ответ объекта JSON с помощью Retrofit 2.1.0?

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

Как я могу получить данные из этого json?

я использую из этого SITE и принеси мне два класса:

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); 
} 
+1

Вы ищете 'response.body()'? – makvasic

+0

'final JsonSignIn docType = response.body();' Добавьте это в 'onResponse'. – FiN

ответ

1

Используйте метод 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) { 

     } 
    }); 
0

Поскольку вы используете конвертер gson, вы можете просто бросить ответ на ModelSignIn

public void onResponse(Call<ModelSignIn> call, Response<ModelSignIn> response) { 
       ModelSignIn msi = (ModelSignIn)response.body(); 
       ... 

, то вы можете просто получить элементы:

msi.getName(); 

и т.д.