如何避免在改造中创建模型

时间:2016-09-19 04:42:42

标签: android retrofit retrofit2

我正在开发一个具有大量网络调用的应用程序,我正在使用它的改造。对于每个请求我创建了模型类,这导致了大量的模型类。所以有什么办法可以避免创建不必要的模型类。

3 个答案:

答案 0 :(得分:1)

对于接收,您可以使用JsonElement作为回复。对于请求,您可以在字符串中创建json并将其发送到下面的desctibe:

<强>接口

@POST("api/")
    Call<JsonElement> request(@Body RequestBody body);

请求:

RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), inputJsonString);
     call.enqueue(new Callback<JsonElement>() {
                @Override
                public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
                    if(response.isSuccessful()){
                        JsonElement jsonElement = response.body();
                        if(jsonElement.isJsonObject()){
                        //use any json deserializer to convert to your class.
                    }
                    else{
                        System.out.println(response.message());
                    }
                }
                @Override
                public void onFailure(Call<JsonElement> call, Throwable t) {
                    System.out.println("Failed");
                }
            });

答案 1 :(得分:0)

是的,你可以避免不必要的模型类。

例如:
假设您有5个模型类,Model_class1是主模型类,您必须声明其他4个子模型类。

class Model_class1
{
  @SerializedName("Model_class2")
  @Expose
   private Model_class2 model_class2;

 @SerializedName("Model_class3")
  @Expose
  private Model_class3 model_class3;

 @SerializedName("Model_class4")
  @Expose
private Model_class4 model_class4;

 @SerializedName("Model_class5")
  @Expose
 private Model_class5 model_class5;

}

在上面的代码段中,如果您只想Model_class2Model_class3,则表示您必须仅在Model_class1中声明这些模型名称,其余两个。无需声明也不需要创建这两个模型类。

答案 2 :(得分:0)

是的,你至少可以发送请求但是接收我从未尝试过。

使用JSONObject或JSONArray并将其传递给改进为 @Body

try {
        JSONObject obj = new JSONObject();
        obj.put("username", "username");
        obj.put("password", "password");
        RetrofitInterface.login(obj);
    } catch (Exception e) {
        e.printStackTrace();
    }

这是您的改造界面类

public interface RetrofitInterface{
  .
  .
  @POST(URL)
  Call login(@Body JSONObject object);
  .
  .
}