2016-09-19 2 views
2

Я разрабатываю приложение, которое имеет много сетевых вызовов, и я использую для этого модификацию. Для каждого запроса я создал класс модели, и это привело к большому количеству классов моделей. Так есть любым способом избежать создания ненужных классов моделей.Как избежать создания моделей в retrofit

+1

Вы имеете в виду классы модели Gson? Да, есть способ. Не используйте Gson и просто разбирайте строки JSON самостоятельно –

+0

Можете ли вы добавить пример кода? –

+0

или всегда анализировать хэш-массив или массив hashmap –

ответ

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_class2 и Model_class3 означает, что вы должны объявить только те имена моделей в Model_class1 и остальные два. Не нужно декларировать и не нужно создавать эти два класса моделей.

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); 
    . 
    . 
} 
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"); 
       } 
      }); 
Смежные вопросы