Intereting Posts
Как открыть «Мастер создания значков Launcher» в eclipse (Android)? Сохранять список или задавать в SharedPreferences Получение ошибки «дублирующаяся запись: com / google / android / gms / internal / zzble.class» при попытке добавить пакет Запуск Skype из программы Programmatically & Pass Number – Android Как изменить цвет рисованной фигуры в файле макета Передача Bluetooth Развертывание на нескольких эмуляторах в студии Android Как предотвратить метод onClick на прозрачной части загруженного PNG ImageView Android, получающий изображение из галереи, вращается Feature Custom Title: Невозможно объединить пользовательские заголовки в API 11 и выше Android OCR tesseract: использование данных объектов Pixa для отображения ограничивающих прямоугольников Android Google Map V2 Display Blank и кнопка только для увеличения? Проблемы с установкой модуля ADT Eclipse 3.7 Ubuntu 11.10 Android picasso clear cache Android отправляет SMS, который отображается в сообщении SMS (без GUI)

Разбор идентификатора строки с SugarORM и GSON

Я использую GSON для создания объекта SugarRecord из json-ответа. API, который я использую, возвращает поле с именем «id», но тип «id» является строкой, а не длинной (бэкэнд использует монго).

Ниже приведен код, который я использую:

 Gson gson = new Gson(); // Or use new GsonBuilder().create(); NutritionPlan target = gson.fromJson(jsonObject.getJSONObject("nutrition_day").toString(), NutritionPlan.class); 

Ниже мой ответ json:

 { "nutrition_day": { "id": "5342b4163865660012ab0000", "start_on": "2014-04-08", "protein_target": 157, "sodium_limit": 2000 } 

Есть ли хороший способ справиться с этим сценарием? Я пытался

 @Ignore long id; 

а также

 @SerializedName("id") String nutrition_plan_id; 

В моей модели, но не помогли. Кто-нибудь знаком с Sugar ORM и знает, как бороться с полем id который не является длинным?

Solutions Collecting From Web of "Разбор идентификатора строки с SugarORM и GSON"

Замените ключ «id» в строке, чтобы быть «nutrition_day_id». Вы можете использовать id json и id sql.

 jsonObject.getJSONObject("nutrition_day").toString().replace("\"id\"","\"nutrition_day_id\"") 

Это помогло мне изменить имя id в mid и добавить аннотацию @Expose ко всем полям, которые должны быть сериализованы и добавить аннотацию @SerializedName в новое поле id .

 @SerializedName("id") @Expose private final String mid; @Expose private final String street; 

Я был обеспокоен той же проблемой, и единственным решением, которое я нашел, было переименование имени id из моего API. Из примера попробуйте отправить nutrition_plan_id вместо id из вашего API, и это выполнит эту работу.

Вот мое решение, но это будет не самое лучшее.

Я просто проигнорировал id в своем Feed

 public class Feed extends SugarRecord<Feed> { @Expose int idMember; } 

Он отлично работает, однако реальный id больше не используется.

Я искал решение этой проблемы в течение довольно долгого времени. Наконец я нашел решение. Просто добавьте примечание @Table к желаемому классу, а не SugarRecord его из SugarRecord и вручную добавьте атрибут id . Вы можете исключить его из сериализации Gson с помощью ключевого слова transient или / и переименовать его с @SerializedName аннотации @SerializedName .

Пример (отлично работает для меня на SugarOrm v1.4):

 @Table public class MySugarOrmClass{ @SerializedName("db_id") private transient Long id = null; @SerializedName("id") private Integer aid; // Add an empty constructor public MySugarClass(){} //Other fields and class attributes ... } 

Но это означает, что вы не можете использовать методы .save(), .delete() , .save(), .delete() и т. Д. В этом классе. Вместо этого вы должны использовать статические методы SugarRecord.save(), SugarRecord.delete() : SugarRecord.save(), SugarRecord.delete() , …